[英]How to ensure that child class will call the correct super constructor in lombok?
說我有以下課程
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class A {
private String item1;
private String item2;
private String item3;
}
和
@Data
public class B extends A {
private String item4;
@Builder(builderMethodName = "bBuilder")
public B(String item1, String item2, String item3, String item4) {
super(item1, item2, item3);
this.item4 = item4;
}
}
當我調用超級構造函數時,我如何(或者甚至有辦法)保證子構造函數將調用“正確”的構造函數? 更具體地說,我想 100% 確保我傳入的三個字符串值確實設置為父項中的正確字段,而不是將 item1 in 設置為 item2 的內容。
我知道我可以,例如:
但我只是好奇 Lombok 是否足夠聰明,以某種方式將子類中的字段設置為父類中的正確字段?
編輯:
我知道字段的順序決定了構造函數的字段的順序,但這對我來說還不夠安全,因為如果有人插入一個新字段,比如在中間,那么它就會把所有東西都扔掉。
然而,也許@SuperBuilder 可能是我可以使用的東西,正如一些人所建議的那樣,如果不是,那么我將明確創建我自己的構造函數來保證字段的順序。
@AllArgsConstructor
的參數順序與源代碼中的字段順序匹配。 所以現在你是安全的。
但是,如果您稍后修改A
字段的順序(或重命名它們),您將得到錯誤的賦值(或構建器中的錯誤參數名稱),但不會出現編譯器錯誤。
但是有一個簡單的方法:使用@SuperBuilder
,然后刪除@Data
。 (請注意,您的層次結構中的所有類都需要@SuperBuilder
。)您不會得到@AllArgsConstructor
,字段順序的更改無關緊要,名稱更改會立即反映在構建器類中。
如果這是不可能的,您唯一的選擇是在A
一個很大的警告注釋,建議以后的編碼人員不要弄亂名稱和順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.