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

2022-09-01 15:42:53

在C#中,可以编写:

MyClass obj = new MyClass()
{
    field1 = "hello",
    field2 = "world",
    field3 = new MyOtherClass()
    {
        etc....
    }
}

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


答案 1

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

类似的方法是使用双括号初始化,其中使用初始值设定项块创建匿名内部子类:

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

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

另一种方法是 为 创建一个生成器,并有如下代码:MyClass

MyClass obj = new MyClassBuilder().
  withField1("hello").
  withField2("world").
  withField3(new MyOtherClass()).
  build();

答案 2

Java 没有内置的功能来使用较短的语法实例化对象。C# 编译器处理此情况,并在 IL 中分离出属性设置程序。在Java语言开发人员确定这很重要之前,您将无法走这条捷径。