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

时间:2011-06-29 08:52:50

标签: c# java object constructor

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

public class MyClass
{
    public int number;
    public string text;
}

var newInstance = new MyClass { number = 1, text = "some text" };

这种创建对象的方式称为object creation expressions。有没有办法在Java中做同样的事情?我想为一个类的任意公共成员传递值。

2 个答案:

答案 0 :(得分:10)

不,没有什么直接相似的。你可以用Java编写的最接近的(没有编写构建器类等)是使用匿名内部类和初始化程序块,这是可怕的,但有效:

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

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

答案 1 :(得分:0)

没有。但我没有发现以下代码太冗长

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作者来说更有用。