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

发布于 2024-11-18 04:11:00 字数 375 浏览 1 评论 0原文

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

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

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

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

In C#, I can create an instance of every custom class that I write, and pass values for its members, like this:

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

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

This way of creating objects is called object creation expressions. Is there a way I can do the same in Java? I want to pass values for arbitrary public members of a class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倒数 2024-11-25 04:11:00

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

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

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

No, there's nothing directly similar. The closest you can come in Java (without writing a builder class etc) is to use an anonymous inner class and initializer block, which is horrible but works:

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

Note the double braces... one to indicate "this is the contents of the anonymous inner class" and one to indicate the initializer block. I wouldn't recommend this style, personally.

定格我的天空 2024-11-25 04:11:00

不。但我不认为下面的代码太冗长

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 作者来说是更多的工作。

No. But I don't find the following code too verbose

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

Or the good old constructor calling too confusing

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

Some may suggest method chaining:

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

class MyClass
    int number
    public MyClass number(int number){ this.number=number; return this; }

which requires an extra method per field. It's boiler plate code, an IDE may help here.

Then there's the builder pattern, which is even more work for the API author.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文