我一直在搞乱Java,我已经设置了一个JButton:
JButton operator = new JButton;
当我尝试为JButton运算符设置属性时,它可以工作:
operator.setFont(new Font("Chalkboard", 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);
因为如果我想为对象设置TWENTY属性(例如,在这种情况下,是一个JButton),那么一遍又一遍地写它是非常繁琐的!
operator.setProperty1("test");
operator.setProperty2("test");
operator.setProperty3("test");
operator.setProperty4("test");
operator.setProperty5("test"); // too much work lol
答案 0 :(得分:2)
如果set
方法没有返回对象本身,则无法链接设置者。你得到的错误,"无法调用......无效"对于签名类似于void setSomething(Object something)
的任何set方法都会发生。
您所指的那种东西在构建器模式中使用得更多。
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个参数的构造函数更少痛苦。