[使用Java中的Builder更新对象的特定字段

问题描述 投票:1回答:2

我有两个班级,如下所述。我想创建两个class A

的实例。

我想从现有实例obj1创建实例obj2,并将a3属性的更新值设置为["Java"

我已经尝试过使用Builder在下面的行,但是它不起作用。

A obj2 = obj1.builder().a3("Java").build();

我可以通过调用构造函数来做到这一点,但我只想做到Builder模式。

有需要的任何帮助。

提前感谢。

@Builder
@Data
class A {
    String a1;
    String a2;
    String a3;
    B b;

    A(String b1, String b2, String b3, B b) {
        this.a1 = b1;
        this.a2 = b2;
        this.a3 = b3;
        this.b = b;
    }
}

@Builder
@Data
class B {
    String b1;
    String b2;
    String b3;

    B(String b1, String b2, String b3) {
        this.b1 = b1;
        this.b2 = b2;
        this.b3 = b3;
    }

}

class Main {
    public static void main(String[] args) {

        B b = new B("a", "b", "b");
        A obj1 = new A("a1", "b1", "b1", b);

        A obj2 = obj1.builder().a3("Java").build();
    }
}

}}

java builder lombok
2个回答
0
投票

obj1.builder()是允许但令人困惑的说法A.builder()。无论哪种方式,都会创建一个全新的A

@Builder(toBuilder = true)

可能是您要寻找的东西

如果为true,则生成实例方法以获得使用该实例的值初始化的构建器。仅当在构造函数,类型本身或返回声明类型实例的静态方法上使用@Builder时合法。

boolean toBuilder() default false;

0
投票

实际上,您必须在注释中启用toBuilder()toBuilder()允许您编辑当前对象。

@Builder(toBuilder = true)

然后执行obj1.toBuilder().a3("Java").build()应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.