[英]Inheritance for builders in lombok
我試圖在我的項目中使用 lombok。
我有一個A類:
@Data
@Builder
public class A {
Integer a1;
}
和 B 類:
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
我收到一條錯誤消息,說 B 中的 builder() 不能覆蓋 A 中的 builder(),因為 BBuilder 中的返回類型與 ABuilder 中的返回類型不兼容。
有沒有辦法使用 lombok 來做到這一點? 我不想為 B 編寫完整的構建器,除非我別無選擇。
PS:由於問題,我已經為 B 類提供了顯式構造函數。 我嘗試搜索,但找不到相同的好的解決方案。
這里我們只需要調用builder的super即可。
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
public static class BBuilder extends ABuilder{
BBuilder() {
super();
}
}
}
如果您將 Lombok 1.18.4 與 IntelliJ 一起使用,以下代碼將適用於您:
@Data
@Builder
class A {
Integer a1;
}
@Data
class B extends A {
Integer b1;
@Builder (builderMethodName = "BBuilder")
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
public class Main {
public static void main(String[] args){
System.out.println(B.BBuilder().a1(1).b1(1).build());
}
}
一個旁注,@SuperBuilder 注釋在撰寫此答案時在 IntelliJ 中不起作用。 如果您有多層繼承,請避免使用 Lombok,否則它會使您的 Java 模型變得混亂。
Lombok 在 version: 1.18.2 中引入了實驗性功能,用於 Builder 注解面臨的繼承問題,可以通過 @SuperBuilder 注解解決
請使用lombok版本:1.18.2,子/父類中的@SuperBuilder注解
如果你的父類已經有@Builder
,那么你的孩子應該用@SuperBuilder
標記。
將父母和孩子都作為@Builder
行不通的。
父類A:
@Data
@Builder
public class A {
Integer a1;
}
兒童班B:
@Data
@SuperBuilder
public class B extends A {
Integer b1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.