【问题标题】:Is there a way to automatically assign all properties in Java? [duplicate]有没有办法在 Java 中自动分配所有属性? [复制]
【发布时间】:2019-10-20 21:17:11
【问题描述】:

假设User 类有很多我想在复制构造函数中复制到另一个实例的属性。有没有捷径可以避免为每个字段手动编写赋值?

例如:

public class User {
    private Integer field1;
    private Integer field2;
    private Integer field3;
    private Integer field4;
    private Integer field5;
    private Integer field6;
    private Integer field7;
    private Integer field8;
    private Integer field9;
    private Integer field10;
    private Integer field11;
    private Integer field12;
    private Integer field13;
    // and more others fields here

    public User(User other) {
        this.field1 = other.field1;
        // eleven fields here
        this.field13 = other.field13;
        // and more others fields here
    }
}

【问题讨论】:

  • 不,没有。 this 不是变量,而是关键字。你想达到什么目标?
  • 如何让你的同事骂你的名字:定义一个名为thıs的变量。
  • 你应该把你的属性放在指定的子类或容器中,把属于的东西组合在一起。然后你只需要“复制”一个装满容器的手,而不是几十个字段。拥有这么多字段通常只是表明设计不佳。
  • 不,但是您可以编写一个接受用户的构造函数。然后,您将使用传入的用户对象中的所有字段调用您拥有的构造函数。
  • 您可以使用 Lombok 或 Immutables 等库来生成复制构造器/构建器。

标签: java constructor instantiation


【解决方案1】:

不,你不能。

你应该使用复制构造函数。

将参数'user'中的所有变量复制到'this'的所有变量中。

【讨论】:

    【解决方案2】:

    这里:

    this = user;
    

    根本无效。 这个不过是:

    this.user = user;
    

    你必须明白你是在一个“属于”某个对象的方法的主体中。在方法体中,您可以使用this访问这个“拥有”对象。然后您可以使用this.someField 来处理该拥有对象的字段。要么读取该字段,要么写入它。

    但如前所述:该代码在“属于”拥有对象的方法中运行。因此,尝试从“拥有”方法中“更改”该所有者是不可能的(也是毫无意义的)。

    您可能正在寻找的是一个 copy 构造函数,请参阅here 以获得一个简单的示例。

    【讨论】:

    • 你看到它是传入构造函数的同一个类的另一个实例吗?
    • @ThorbjørnRavnAndersen 还有?没关系,this 不是可以单独存在于 = 左侧的东西,无论您在右侧有什么。所以是的,他得到了复制构造函数的签名,但显然他不知道如何从那里开始。
    最近更新 更多