Java中是否有类似于C#中的对象创建表达式

本文关键字:对象 创建 表达式 类似于 是否 Java | 更新日期: 2023-09-27 18:00:35

在C#中,我可以为我编写的每个自定义类创建一个实例,并为其成员传递值,如下所示:

public class MyClass
{
    public int number;
    public string text;
}
var newInstance = new MyClass { number = 1, text = "some text" };

这种创建对象的方式称为对象创建表达式。有没有一种方法可以在Java中做到这一点?我想为类的任意公共成员传递值。

Java中是否有类似于C#中的对象创建表达式

不,没有任何直接相似之处。在Java中(无需编写构建器类等),最接近的方法是使用匿名的内部类和初始化器块,这很可怕,但很有效:

MyClass foo = new MyClass()
{{
    number = 1;
    text = "some text";
}};

注意双大括号。。。一个表示"这是匿名内部类的内容",另一个表示初始化器块。我个人不会推荐这种风格。

否。但我不觉得下面的代码太冗长

MyClass obj = new MyClass();
obj.number = 1;
obj.text = "some text";

或者好的老构造函数调用太令人困惑的

MyClass obj = new MyClass(1, "some text");

有些人可能会建议方法链接:

MyClass obj = new MyClass().number(1).text("some text");
class MyClass
    int number
    public MyClass number(int number){ this.number=number; return this; }

这需要每个字段有一个额外的方法。这是锅炉板代码,IDE可能会在这里有所帮助。

然后是构建器模式,这对于API作者来说是更多的工作。