可以在Java中使用C#样式对象初始化吗?

Chr*_*son 26 c# java initialization

在C#中可以写:

MyClass obj = new MyClass()
{
    field1 = "hello",
    field2 = "world",
    field3 = new MyOtherClass()
    {
        etc....
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以看到数组初始化可以用类似的方式完成,但是类似于上面的东西也可以在Java中完成,如果是这样,那么语法是什么?

Jor*_*dão 38

Java中不存在该初始化语法.

类似的方法是使用双括号初始化,您可以使用初始化块创建一个匿名内部子类:

MyClass obj = new MyClass() {{
  // in Java these would be more like this: setFieldX(value);
  field1 = "hello";
  field2 = "world";
  field3 = new MyOtherClass() ...
}};
Run Code Online (Sandbox Code Playgroud)

但请注意,您实际上是在创建子类.

另一种方法是为其创建构建器MyClass,并具有以下代码:

MyClass obj = new MyClassBuilder().
  withField1("hello").
  withField2("world").
  withField3(new MyOtherClass()).
  build();
Run Code Online (Sandbox Code Playgroud)

  • 这么多Java模式只是它原始语法的变通方法...... (4认同)
  • sooooo ....为了获得简单的实例化语法,我需要编写一个新的Builder类?对于每种类型?不用了,谢谢. (3认同)
  • 哇,Java 与其他语言相比是如此缺乏,令人惊讶的是它被这么多人/组织使用 (2认同)