【发布时间】:2021-09-22 13:09:54
【问题描述】:
我正在尝试使用 Lombok 的 @With 注释设置克隆,但我遇到了一个问题,它将继承的字段设置为 null。为了演示,假设我有以下类层次结构:
@NoArgsConstructor
@AllArgsConstructor
@Getter
abstract class Person {
protected String name;
protected Integer age;
}
@NoArgsConstructor
@AllArgsConstructor
@With
@Getter
class Employee extends Person {
protected String id;
@Builder
public Employee(String name, Integer age, String id) {
super(name, age);
this.id = id;
}
}
当我尝试这样做时:
var template = Employee.builder().name("John Smith").age(20).build();
var clone = template.withId("ABC123");
clone.name 和 clone.age 都返回 null。允许这种构造吗?如何让它发挥作用?
【问题讨论】:
-
@JanRieke 谢谢。在发布这个问题后,我偶然发现了
toBuilder,它完成了我所追求的,尽管不太令人满意。我猜自您回答以来情况没有改变,目前最好的选择是使用toBuilder? -
暂时没有变化。