註解類型 建構器


@Target({TYPE,METHOD,CONSTRUCTOR}) @Retention(SOURCE) public @interface Builder
建構器註解為被標註的類別或包含以 @Builder 標註成員的類別建立所謂的「建構器」方面。

如果成員被標註,則必須是建構子或方法。如果類別被標註,則會產生一個 package-private 建構子,其中所有欄位都作為參數(如同類別上存在 @AllArgsConstructor(access = AccessLevel.PACKAGE)),並且就好像此建構子已被 @Builder 標註一樣。請注意,只有在您沒有編寫任何建構子且沒有新增任何明確的 @XArgsConstructor 註解時,才會產生此建構子。在這些情況下,lombok 將假定存在一個 all-args 建構子並產生使用它的程式碼;這表示如果此建構子不存在,您會收到編譯器錯誤。

@Builder 的效果是產生一個名為 TBuilder 的內部類別,其中包含私有建構子。TBuilder 的實例是使用名為 builder() 的方法建立的,該方法也會在類別本身中為您產生(而不是在建構器類別中)。

TBuilder 類別包含一個方法,對應於標註的建構子/方法(標註類別時為每個欄位)的每個參數,該方法會傳回建構器本身。建構器還具有一個 build() 方法,該方法會傳回原始類型的已完成實例,該實例是透過將建構器中各種其他方法設定的所有參數傳遞給以 @Builder 標註的建構子或方法來建立的。此方法的傳回類型將與相關類別相同,除非方法已被標註,在這種情況下,它將等於該方法的傳回類型。

完整文件請參閱 project lombok 功能頁面 @Builder

之前

 @Builder
 class Example<T> {
        private T foo;
        private final String bar;
 }
 
之後
 class Example<T> {
        private T foo;
        private final String bar;
        
        private Example(T foo, String bar) {
                this.foo = foo;
                this.bar = bar;
        }
        
        public static <T> ExampleBuilder<T> builder() {
                return new ExampleBuilder<T>();
        }
        
        public static class ExampleBuilder<T> {
                private T foo;
                private String bar;
                
                private ExampleBuilder() {}
                
                public ExampleBuilder foo(T foo) {
                        this.foo = foo;
                        return this;
                }
                
                public ExampleBuilder bar(String bar) {
                        this.bar = bar;
                        return this;
                }
                
                @java.lang.Override public String toString() {
                        return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
                }
                
                public Example build() {
                        return new Example(foo, bar);
                }
        }
 }
 
另請參閱
  • 巢狀類別摘要

    巢狀類別
    修飾符和類型
    類別
    描述
    static @interface 
    @Default 標註的欄位必須具有初始化表達式;如果建構期間未明確設定,則該表達式將作為預設值使用。
    static @interface 
    放置在欄位上(如果類型上使用 @Builder)或參數上(如果建構子或靜態方法上使用 @Builder),以指示 lombok 應如何針對給定實例取得此欄位或參數的值;這僅在 toBuildertrue 時相關。
  • 可選元素摘要

    可選元素
    修飾符和類型
    可選元素
    描述
    設定產生的建構器類別的存取層級。
    建構器類別的名稱。
     
     
    要前置於產生的建構器類別中 'set' 方法的字首。
    boolean
    如果為 true,則產生一個實例方法以取得使用此實例的值初始化的建構器。
  • 元素詳細資訊

    • builderMethodName

      String builderMethodName
      傳回
      建立新建構器實例的方法名稱。預設值:builder。如果為空字串,則抑制產生 builder 方法。
      預設
      "builder"
    • buildMethodName

      String buildMethodName
      傳回
      在建構器類別中,建立您的 @Builder 標註類別實例的方法名稱。
      預設
      "build"
    • builderClassName

      String builderClassName
      建構器類別的名稱。類型和建構子上 @Builder 的預設值:請參閱 configkey lombok.builder.className,如果未設定,則預設為 (TypeName)Builder

      方法上 @Builder 的預設值:請參閱 configkey lombok.builder.className,如果未設定,則預設為 (ReturnTypeName)Builder

      傳回
      將產生的建構器類別的名稱(或者,如果它已存在,將會填入建構器元素)。
      預設
      ""
    • toBuilder

      boolean toBuilder
      如果為 true,則產生一個實例方法以取得使用此實例的值初始化的建構器。僅當 @Builder 用於建構子、類型本身或傳回宣告類型實例的靜態方法時才合法。
      傳回
      是否產生 toBuilder() 方法。
      預設
      false
    • access

      AccessLevel access
      設定產生的建構器類別的存取層級。預設情況下,產生的建構器類別是 public。注意:如果您編寫自己的建構器類別,則此操作無效(我們不會變更其存取層級)。
      傳回
      建構器類別將使用此存取修飾符產生。
      預設
      PUBLIC
    • setterPrefix

      String setterPrefix
      要前置於產生的建構器類別中 'set' 方法的字首。預設情況下,產生的方法不包含字首。例如,如果使用 @Builder(setterPrefix = "with"),則通常產生為 someField(String someField) 的方法將改為產生為 withSomeField(String someField)。請注意,強烈建議不要使用 "with" 作為建構器 setter 方法的字首,因為 "with" 通常表示不可變的資料結構,而建構器在定義上是可變物件。對於 @Singular 欄位,產生的方法稱為 withNamewithNamesclearNames,而不是預設的 namenamesclearNames
      傳回
      要前置於產生方法名稱的字首。
      預設
      ""