註解類型 建構器
建構器註解為被標註的類別或包含以
@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 應如何針對給定實例取得此欄位或參數的值;這僅在toBuilder
為true
時相關。 -
可選元素摘要
可選元素修飾符和類型可選元素描述設定產生的建構器類別的存取層級。建構器類別的名稱。要前置於產生的建構器類別中 'set' 方法的字首。boolean
如果為 true,則產生一個實例方法以取得使用此實例的值初始化的建構器。
-
元素詳細資訊
-
builderMethodName
-
buildMethodName
-
builderClassName
String builderClassName建構器類別的名稱。類型和建構子上@Builder
的預設值:請參閱 configkeylombok.builder.className
,如果未設定,則預設為(TypeName)Builder
。方法上
@Builder
的預設值:請參閱 configkeylombok.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
欄位,產生的方法稱為withName
、withNames
和clearNames
,而不是預設的name
、names
和clearNames
。- 傳回
- 要前置於產生方法名稱的字首。
- 預設
""
-