在java中使用Builder更新对象的特定字段
我有两门课,如下所述。 我想创建两个在java中使用Builder更新对象的特定字段,java,builder,lombok,Java,Builder,Lombok,我有两门课,如下所述。 我想创建两个A类的实例 我想从现有实例obj1创建实例obj2,更新后的a3属性值为“Java” 我曾尝试使用生成器进行线下操作,但不起作用 A obj2 = obj1.builder().a3("Java").build(); 我可以通过调用构造函数来实现,但我只想通过模式来实现 @Builder @Data class A { String a1; String a2; String a3; B b; A(String b1
A类的实例
我想从现有实例obj1创建实例obj2,更新后的a3属性值为“Java”
我曾尝试使用生成器进行线下操作,但不起作用
A obj2 = obj1.builder().a3("Java").build();
我可以通过调用构造函数来实现,但我只想通过模式来实现
@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 = new A("x1", "y1", "z1", b);
List<A> list= new ArrayList<>();
list.add(obj1);
list.add(obj2);
list.forEach(a -> {a.toBuilder().a1("newA1").a2("newA2").build()});
A obj3 = obj1.toBuilder().a3("Java").build();
}
}
如果使用
使用我无法获取a1和a2的更新值实际上,您必须在注释中启用toBuilder()
toBuilder()
允许您编辑当前对象
@Builder(toBuilder=true)
然后执行obj1.toBuilder().a3(“Java”).build()
应该可以工作。实际上,您必须在注释中启用toBuilder()
toBuilder()
允许您编辑当前对象
@Builder(toBuilder=true)
然后执行obj1.toBuilder().a3(“Java”).build()
应该可以。obj1.builder()
是一种允许但令人困惑的方式来表示A.builder()
。不建议对实例调用静态方法。无论哪种方式,都将创建一个全新的a
@Builder(toBuilder = true)
可能就是你要找的
如果为true,则生成一个实例方法,以获取使用此实例的值初始化的生成器。仅当构造函数、类型本身或返回声明类型实例的静态方法上使用了@Builder
时才合法
boolean toBuilder() default false;
obj1.builder()
是一种允许但容易混淆的表达A.builder()
的方式。不建议对实例调用静态方法。无论哪种方式,都将创建一个全新的a
@Builder(toBuilder = true)
可能就是你要找的
如果为true,则生成一个实例方法,以获取使用此实例的值初始化的生成器。仅当构造函数、类型本身或返回声明类型实例的静态方法上使用了@Builder
时才合法
boolean toBuilder() default false;
lombok的@Builder
仅用于实例化对象。除了builder
是一个静态方法外,您不能在对象实例上调用它。@Andronicus我可以调用obj1.builder().a3(“Java”).build()
。但问题是,只设置了属性a3
,其余所有字段都是null
。即使lombok的obj1
@Builder
中有这些字段,它们也仅用于实例化对象。除了builder
是一个静态方法外,您不能在对象实例上调用它。@Andronicus我可以调用obj1.builder().a3(“Java”).build()
。但问题是,只设置了属性a3
,其余所有字段都是null
。即使那些字段在obj1
中。我可以创建新的A
,但我想要旧对象的其他属性的所有值。你好,伙计,我面临@Builder模式的lambda表达式问题。我可以创建新的A
,但是我想要旧对象的其他属性的所有值。你好,伙计,我面临着@Builder模式的lambda表达式的问题。