簡體   English   中英

龍目島的@ Builder / @ AllArgsConstructor如何調用自定義構造函數?

[英]How can Lombok's @Builder/@AllArgsConstructor invoke a custom constructor?

我有一個自定義的無參數構造函數,我想由Lombok生成的Builder調用它。 我認為這等同於擁有一個帶有所有參數的構造函數,而該參數首先要調用這樣的自定義無參數構造函數。

我會舉例說明

@Builder
@Data
public class BuilderExample extends Foo{

  private String name;
  private int age;

  public BuilderExample(){
    super.setSome(thing);
  }

}

BuilderExample.build()創建的實例應設置super.setSome(thing);

到目前為止,我能找到的唯一方法是編寫all-args-constructor並使其調用no-args-one。 我認為這擊敗了使用Lombok的構造函數和構造函數的所有想法,就好像字段的數量大於一或兩個,all-args構造函數的編寫和維護變得乏味。

還有另一種方法可以做到這一點嗎?

您可以定義一個幾乎空的嵌套

class BuilderExampleBuilder {
    public BuilderExample build() {
        BuilderExample result = new ...all the stuff Lombok does
        result.setSome(thing);
        return result;
    }
}

但這有一些問題:

  • all-args構造函數很冗長,容易忘記一個新字段。
  • 調用result.setSome(thing)不能使用super關鍵字。 這可以通過提供類似的方法來解決

    私人superSetSome(事物){super.setSome(事物); }

您也可以使用非靜態初始化程序塊,例如

{
   super.setSome(thing);
}

這就是所有可以做的事,沒有很好的解決方案。 沒有鈎子允許將代碼注入到構造器或構造器中。

暫無
暫無

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

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