在C#中,我可以创建我编写的每个自定义类的实例,并为其成员传递值,如下所示:
public class MyClass
{
public int number;
public string text;
}
var newInstance = new MyClass { number = 1, text = "some text" };
这种创建对象的方式称为object creation expressions。有没有办法在Java中做同样的事情?我想为一个类的任意公共成员传递值。
答案 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作者来说更有用。