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

时间:2018-03-09 21:03:16

标签: java object properties

我一直在搞乱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

1 个答案:

答案 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个参数的构造函数更少痛苦。