@Getter 和 @Setter
永遠不再撰寫 public int getFoo() {return foo;}
。
總覽
您可以使用 @Getter
和/或 @Setter
註解任何欄位,讓 lombok 自動產生預設的 getter/setter。
預設的 getter 只是簡單地回傳欄位,如果欄位名稱為 foo
,則命名為 getFoo
(如果欄位類型為 boolean
,則為 isFoo
)。預設的 setter 如果欄位名稱為 foo
,則命名為 setFoo
,回傳 void
,並接受與欄位類型相同的 1 個參數。它只是簡單地將欄位設定為這個值。
除非您明確指定 AccessLevel
,否則產生的 getter/setter 方法將會是 public
,如下例所示。合法的存取層級有 PUBLIC
、PROTECTED
、PACKAGE
和 PRIVATE
。
您也可以在類別上放置 @Getter
和/或 @Setter
註解。在這種情況下,就如同您使用該註解註解了該類別中所有非靜態欄位。
您始終可以使用特殊的 AccessLevel.NONE
存取層級,手動停用任何欄位的 getter/setter 產生。這讓您可以覆寫類別上 @Getter
、@Setter
或 @Data
註解的行為。
若要在產生的方法上放置註解,您可以使用 onMethod=@__({@AnnotationsHere})
;若要在產生的 setter 方法的唯一參數上放置註解,您可以使用 onParam=@__({@AnnotationsHere})
。但請注意!這是一項實驗性功能。如需更多詳細資訊,請參閱關於 onX 功能的文件。
lombok v1.12.0 的新功能: 欄位上的 javadoc 現在將會複製到產生的 getter 和 setter。通常,所有文字都會被複製,而 @return
會移動到 getter,同時 @param
行會移動到 setter。「移動」表示:從欄位的 javadoc 中刪除。也可以為每個 getter/setter 定義獨特的文字。若要這麼做,您可以建立一個名為 GETTER
和/或 SETTER
的「區段」。區段是您 javadoc 中的一行,包含 2 個或更多破折號,然後是文字「GETTER」或「SETTER」,接著是 2 個或更多破折號,並且該行上沒有其他內容。如果您使用區段,則不再對該區段進行 @return
和 @param
剝離(將 @return
或 @param
行移動到區段中)。
使用 Lombok
import lombok.AccessLevel;
|
原生 Java
public class GetterSetterExample {
|
支援的組態金鑰
-
lombok.accessors.chain
= [true
|false
] (預設值:false) - 若設定為
true
,產生的 setter 將會回傳this
(而不是void
)。@Accessors
註解的明確設定的chain
參數優先於此設定。 -
lombok.accessors.fluent
= [true
|false
] (預設值:false) - 若設定為
true
,產生的 getter 和 setter 將不會以 bean 標準的 'get
、is
或set
' 作為前綴;相反地,這些方法將會使用與欄位相同的名稱(減去前綴)。@Accessors
註解的明確設定的fluent
參數優先於此設定。 -
lombok.accessors.prefix
+= 欄位前綴 (預設值:空列表) - 這是一個列表屬性;可以使用
+=
運算子新增項目。可以透過-=
運算子移除從父組態檔繼承的前綴。Lombok 將會從欄位名稱中剝離任何符合的欄位前綴,以判斷要產生的 getter/setter 的名稱。例如,如果m
是此設定中列出的前綴之一,則名為mFoobar
的欄位將會產生名為getFoobar()
的 getter,而不是getMFoobar()
。@Accessors
註解的明確設定的prefix
參數優先於此設定。 -
lombok.getter.noIsPrefix
= [true
|false
] (預設值:false) - 若設定為
true
,為boolean
欄位產生的 getter 將會使用get
前綴,而不是預設的is
前綴,並且任何呼叫 getter 的產生程式碼,例如@ToString
,也將使用get
而不是is
-
lombok.accessors.capitalization
= [basic
|beanspec
] (預設值:basic) - 控制如何將像
uShaped
(一個小寫字母後跟一個大寫/首字母大寫字母)這樣的棘手案例大寫。basic
將其大寫為getUShaped
,而beanspec
則將其大寫為getuShaped
。
兩種策略在 java 生態系統中都很常用,儘管beanspec
更常見。 -
lombok.setter.flagUsage
= [warning
|error
] (預設值:未設定) - 如果已設定,Lombok 將會將任何
@Setter
的使用標記為警告或錯誤。 -
lombok.getter.flagUsage
= [warning
|error
] (預設值:未設定) - 如果已設定,Lombok 將會將任何
@Getter
的使用標記為警告或錯誤。 -
lombok.copyableAnnotations
= [完整類型名稱列表] (預設值:空列表) - Lombok 將會從欄位複製這些註解中的任何一個到 setter 參數和 getter 方法。請注意,lombok 隨附了許多「開箱即用」的註解,這些註解已知是可以複製的:所有常見的可為空/不可為空的註解。
小字印刷
對於產生方法名稱,如果欄位的第一個字元是小寫字元,則會將其轉換為首字母大寫,否則保持不變。然後,加上 get/set/is 前綴。
如果已經存在任何具有相同名稱(不區分大小寫)和相同參數計數的方法,則不會產生任何方法。例如,即使從技術上來說可以建立方法,但如果已經有一個方法 getFoo(String... x)
,則不會產生 getFoo()
。存在此注意事項是為了防止混淆。如果由於此原因跳過方法的產生,則會發出警告。Varargs 算作 0 到 N 個參數。您可以將任何方法標記為 @lombok.experimental.Tolerate
以將其從 lombok 中隱藏。
對於以 is
開頭,緊接著大寫字母的 boolean
欄位,不會加上任何前綴來產生 getter 名稱。
boolean
的任何變體都不會導致使用 is
前綴而不是 get
前綴;例如,回傳 java.lang.Boolean
會導致 get
前綴,而不是 is
前綴。
許多來自常見函式庫的註解(表示不可為空,例如 javax.annotation.Nonnull
),如果存在於欄位上,則會在產生的 setter 中產生明確的 null 檢查。
各種關於可為空性的知名註解,例如 org.eclipse.jdt.annotation.NonNull
,會自動複製到正確的位置(getter 的方法,setter 的參數)。您可以透過 lombok 組態金鑰 lombok.copyableAnnotations
指定應始終複製的其他註解。
您可以使用 @Getter
或 @Setter
註解類別。這樣做等同於使用該註解註解該類別中的所有非靜態欄位。欄位上的 @Getter
/@Setter
註解優先於類別上的註解。
使用 AccessLevel.NONE
存取層級只會產生任何內容。它僅在與 @Data
或類別範圍的 @Getter
或 @Setter
結合使用時才有用。
@Getter
也可以用於 enum。@Setter
則不行,這不是技術原因,而是務實原因:enum 上的 setter 是一個非常糟糕的主意。