我有两个班级,如下所述。我想创建两个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();
}
}
}}
obj1.builder()
是允许但令人困惑的说法A.builder()
。无论哪种方式,都会创建一个全新的A
。
@Builder(toBuilder = true)
可能是您要寻找的东西
如果为true,则生成实例方法以获得使用该实例的值初始化的构建器。仅当在构造函数,类型本身或返回声明类型实例的静态方法上使用
@Builder
时合法。boolean toBuilder() default false;
实际上,您必须在注释中启用toBuilder()
。 toBuilder()
允许您编辑当前对象。
@Builder(toBuilder = true)
然后执行obj1.toBuilder().a3("Java").build()
应该可以。