[英]Lombok builder override default constructor
我正在使用默认构造函数从子类设置@Builder
的值,并且最初没有使用@Builder
。 最终我决定在这里使用 Builder,但现在的问题是 lombok Builder 在内部覆盖了我的默认构造函数,因此从未设置该值。
我怎样才能放置任何钩子让@Builder
使用我的默认构造函数?
父类:
@Getter
@Setter
public abstract class Record {
private String recordId;
}
儿童班:
@Getter
@Setter
@Builder
@ToString
@AllArgsConstructor
public class SRecord extends Record {
private static final String RECORD_ID = "REC001";
private String street;
private String city;
public SRecord() {
setRecordId(RECORD_ID); //value of recordId being set
}
}
Lombok 的@Builder
根本不使用默认构造函数。 它将其值传递给全参数构造函数,以便该构造函数可以用这些值填充新实例。 @Builder
不使用 setter 或直接访问字段来这样做。 所以你的默认构造函数被@Builder
简单地忽略了。
您可以做的是编写自己的全参数构造函数。 在其中,您设置recordId
的值并分配参数中的其余字段。
我认为您应该在基类中创建一个构造函数:
@Getter
@Setter
public abstract class Record {
private String recordId;
public Record(String recordId) {
this.recordId = recordId;
}
}
然后在继承类的构造函数中使用它:
@Getter
@Setter
@Builder
public class SRecord extends Record {
private static final String RECORD_ID = "REC001";
private String street;
private String city;
public SRecord(String street, String city) {
super(RECORD_ID);
this.street = street;
this.city = city;
}
}
PS 如果您想使用带有继承的Lombok Builder,您可以使用此技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.