gpt4 book ai didi

java - 如何更有效地向对象添加多个属性

转载 作者:行者123 更新时间:2023-12-02 02:16:46 24 4
gpt4 key购买 nike

我一直在摆弄 Java,并且我已经将 JButton 设置为这样:

JButton 运算符 = new JButton;

当我尝试为 JButton 运算符设置属性时,它起作用了:

operator.setFont(new Font("黑板", Font.PLAIN, 30));

但是,当我尝试设置多个属性(这就是我想要做的)时,它会抛出错误 - 当我这样做时!

Dimension d = new Dimension(200, 200);
operator.setFont(new Font("Chalkboard", Font.PLAIN, 30))
.setPreferredSize(d)
.setBackground(Color.RED);
// Error: "Cannot invoke preferredSize(Dimension) on the primitive type void"

我该如何为对象operator设置多个属性?我不想这样做-

operator.setFont(new Font("Chalkboard"), Font.PLAIN, 30));
operator.setPreferredSize(d);
operator.setBackground(Color.RED);

因为如果我想为对象设置 20 个属性(例如,在本例中为 JButton),那么一遍又一遍地编写它会非常乏味!

operator.setProperty1("test");
operator.setProperty2("test");
operator.setProperty3("test");
operator.setProperty4("test");
operator.setProperty5("test"); // too much work lol

最佳答案

如果 set 方法不返回对象本身,则无法链接 setter。对于任何签名类似于 void setSomething(Object Something) 的 set 方法,都会出现您收到的错误“cannot invoke...on void”。

您所指的那种东西在构建器模式中使用得更多。

public class SomeObject {

private String name;

private String colour;

public SomeObject name(String name) {
this.name = name;
return this;
}

public SomeObject colour(String colour) {
this.colour = colour;
return this;
}
}

在此示例中,您可以使用 SomeObject ,例如

SomeObject o = new SomeObject().name("A name").colour("red");

在您提供的示例中,如果各种 setProperty 方法是 void 方法,您必须按照问题中出现的方式进行操作;所以在你的情况下,是的,20 个不同的 operator.setProperty... 是必要的。

这可能需要大量工作,但比具有 20 个参数的构造函数要轻松一些。

关于java - 如何更有效地向对象添加多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49202100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com