簡體   English   中英

如何確保子類將在 lombok 中調用正確的超級構造函數?

[英]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 的內容。

我知道我可以,例如:

  • 顯式創建我自己的所有 args 構造函數
  • 在子構造函數中,調用父構造函數的所有設置器

但我只是好奇 Lombok 是否足夠聰明,以某種方式將子類中的字段設置為父類中的正確字段?

編輯

我知道字段的順序決定了構造函數的字段的順序,但這對我來說還不夠安全,因為如果有人插入一個新字段,比如在中間,那么它就會把所有東西都扔掉。

然而,也許@SuperBuilder 可能是我可以使用的東西,正如一些人所建議的那樣,如果不是,那么我將明確創建我自己的構造函數來保證字段的順序。

@AllArgsConstructor的參數順序與源代碼中的字段順序匹配。 所以現在你是安全的。

但是,如果您稍后修改A字段的順序(或重命名它們),您將得到錯誤的賦值(或構建器中的錯誤參數名稱),但不會出現編譯器錯誤。

但是有一個簡單的方法:使用@SuperBuilder ,然后刪除@Data (請注意,您的層次結構中的所有類都需要@SuperBuilder 。)您不會得到@AllArgsConstructor ,字段順序的更改無關緊要,名稱更改會立即反映在構建器類中。

如果這是不可能的,您唯一的選擇是在A一個很大的警告注釋,建議以后的編碼人員不要弄亂名稱和順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM