Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更有效地向对象添加多个特性_Java_Object_Properties - Fatal编程技术网

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

Java 如何更有效地向对象添加多个特性,java,object,properties,Java,Object,Properties,我一直在玩弄Java,我设置了一个JButton: JButton操作符=新JButton 当我尝试为JButton操作符设置属性时,它会起作用: operator.setFont(新字体(“黑板”,Font.PLAIN,30)) 然而,当我试图设置多个属性(这是我想要做的),它会抛出一个错误-当我这样做的时候 Dimension d = new Dimension(200, 200); operator.setFont(new Font("Chalkboard", Font.PLAIN, 30

我一直在玩弄Java,我设置了一个JButton:

JButton操作符=新JButton

当我尝试为JButton操作符设置属性时,它会起作用:

operator.setFont(新字体(“黑板”,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.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(objectsomething)
的任何set方法,都会出现“cannotinvoke…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
like

SomeObject o = new SomeObject().name("A name").colour("red");
在您提供的示例中,如果各种
setProperty
方法都是
void
方法,则必须按照问题中显示的方式执行;因此,在您的情况下,是的,有20个不同的
操作符.setProperty
。。。这是必要的


这可能需要做很多工作,但比一个有20个参数的构造函数要轻松。

如果
set
方法本身不返回对象,则无法链接setter。对于签名类似于
void setSomething(objectsomething)
的任何set方法,都会出现“cannotinvoke…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
like

SomeObject o = new SomeObject().name("A name").colour("red");
在您提供的示例中,如果各种
setProperty
方法都是
void
方法,则必须按照问题中显示的方式执行;因此,在您的情况下,是的,有20个不同的
操作符.setProperty
。。。这是必要的


这可能需要做很多工作,但比一个有20个参数的构造函数要轻松。

那么,有没有更有效的方法来设置对象的多个属性?在您的特定情况下,没有。我更新了答案,提供了更多细节。罗伯特·C·马丁的《干净的代码》是一本值得一读的好书。谢谢你的建议。那么,有没有更有效的方法来设置对象的多个属性呢?在你的情况下,没有。我更新了答案,提供了更多的细节。罗伯特·C·马丁的《干净的代码》是一本值得一读的好书。谢谢你的推荐。