Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的灵活/参数化构造函数_Java_Javascript - Fatal编程技术网

Java中的灵活/参数化构造函数

Java中的灵活/参数化构造函数,java,javascript,Java,Javascript,我做Java已经12年了,最近我也在做Javascript,我想知道Java社区是否考虑过某种灵活的构造函数机制 Java中的构造函数可能会让事情变得一团糟。如果有许多不同的路径来创建对象,那么每个路径都需要一个构造函数 如果您可以有一个构造函数,在该构造函数中,您可以输入与类内部字段匹配的任何值: Person p = new Person([ name:’bob’, height:123, address:new Address([ street:’asdf’,

我做Java已经12年了,最近我也在做Javascript,我想知道Java社区是否考虑过某种灵活的构造函数机制

Java中的构造函数可能会让事情变得一团糟。如果有许多不同的路径来创建对象,那么每个路径都需要一个构造函数

如果您可以有一个构造函数,在该构造函数中,您可以输入与类内部字段匹配的任何值:

Person p = new Person([
  name:’bob’,
  height:123,
  address:new Address([
    street:’asdf’,
    postcode:4232
    ])
  ]);
(我在这里使用方括号,但您需要一些其他符号,因为这与Java中的数组冲突)

然后定义类中的哪些字段可以在构造函数与注释的组合中使用:

public class Person{

    @constructable
    private String name;
    @constructable
    private int height;
    @constructable
    Private Address address;

.....

}       

public class Address {

    @constructable
    private String street;
    @constructable
    private String postcode;
    @constructable
    private String city;

.....

}
这些都是语法上的甜点。在编译期间,编译器将计算出类所需的所有构造函数,并相应地更新类

JSR中有没有提出过类似的建议


这是否打破了Java背后的核心理念?(即,构造器不应如此不受限制)

这主要可以通过构造器模式实现。这在创建对象需要大量信息时非常有用。

从未见过它。不明白为什么语言会这样做。另一种可能性是Builder模式。AFAIK java8将支持命名方法/构造函数参数。如果是这样,您可以通过反射通过hashmap构造类。这只是简单地说“我希望能够直接将JSON填充到构造函数中”。但为什么要对糟糕的编译静态类型Java执行此操作?继续使用Javascript。因为Java8,它甚至是一种JDK语言。但是还有更多的编码