@Accessors
更流暢的 getter 和 setter API。
@Accessors
在 lombok v0.11.0 中以實驗性功能引入。
lombok.config 選項 lombok.accessors.capitalization
= [basic
| beanspec
] 在 lombok v1.18.24 中新增。
功能變更:@Accessors
現在會「層疊」;任何未在欄位層級 @Accessors
註解上設定的選項,都將從類別上的 @Accessors
註解繼承(而任何未在這些註解上設定的選項,則從封閉類別繼承)。最後,在 lombok.config
中設定的任何內容都將用作預設值。(lombok v1.18.24)
新功能:@Accessors(makeFinal = true)
將建立 final
getter、setter 和 with-er。還有 lombok.config
鍵 lombok.accessors.makeFinal
具有相同的效果。(lombok v1.18.24)
實驗性功能
實驗性功能的原因是- 我們可能希望將這些功能整合到更完整的屬性支援概念中。
makeFinal
功能是最近發布的;正在等待社群回饋。
- 開放功能請求:更精細地控制命名訪問器;例如,解決具有創意的布林屬性命名:將
boolean wasRunning
轉換為boolean wasRunning()
而不是boolean isWasRunning()
,以及更廣泛的前綴支援。如果這個功能請求得到解決,@Accessors
將會參與其中。 @Accessors
目前不會從欄位@Accessors
註解「層疊」到類別層級的@Accessors
註解,但它會「層疊」到lombok.config
。更改這一點並不困難,但會造成向後不相容。這不太可能破壞太多現有程式碼,但需要在該功能可以脫離實驗性狀態之前決定。
概觀
@Accessors
註解用於配置 lombok 如何產生和查找 getter、setter 和 with-er。
預設情況下,lombok 遵循 bean 規範 來產生 getter 和 setter:例如,名為 pepper
的欄位的 getter 是 getPepper
。但是,有些人可能希望打破 bean 規範,以便獲得外觀更佳的 API。@Accessors
讓您可以做到這一點。
有些程式設計師喜歡為其欄位使用前綴,即他們寫 fPepper
而不是 pepper
。我們強烈不建議這樣做,因為您無法單元測試前綴的有效性,並且重構腳本可能會將欄位變成區域變數或方法名稱。此外,如果您希望此資訊立即可見,您的工具(例如您的編輯器)可以負責以某種方式呈現識別碼。儘管如此,您也可以透過 @Accessors
列出您的專案使用的前綴。
@Accessors
有 4 個選項
-
fluent
– 一個布林值。如果為 true,則pepper
的 getter 只是pepper()
,而 setter 是pepper(T newValue)
。此外,除非另有指定,否則chain
預設為 true。
預設值:false。 -
chain
– 一個布林值。如果為 true,則產生的 setter 會傳回this
而不是void
。
預設值:false,除非fluent=true
,然後預設值:true。 -
makeFinal
– 一個布林值。如果為 true,則產生的 getter、setter 和 with-er 會標記為final
。
預設值:false。 -
prefix
– 字串列表。如果存在,欄位必須以這些前綴中的任何一個作為前綴。每個欄位名稱會依序與列表中的每個前綴進行比較,如果找到匹配項,則會剝離前綴以建立欄位的基本名稱。在列表中包含空字串是合法的,它將始終匹配。對於字母字元,前綴後面的字元不得為小寫字母,即pepper
即使對於前綴p
也不匹配,但pEpper
會匹配(並且表示此欄位的基本名稱為epper
)。
@Accessors
註解在類型和欄位上都是合法的;getter/setter/with-er 將首先查看欄位上的註解,其次查看欄位所在的類型上的註解(並且您在類型中有類型,每個外部類型也會被檢查),最後對於任何未明確設定的屬性,將使用適當的 lombok.config
設定。
使用 Lombok
import lombok.experimental.Accessors;
|
Vanilla Java
public class AccessorsExample {
|
支援的配置鍵
-
lombok.accessors.chain
= [true
|false
] (預設值:false) - 如果設定為
true
,任何沒有@Accessors
註解的欄位/類別,或者有註解但該註解沒有chain
參數的明確值,都將表現得如同存在@Accessors(chain = true)
一樣。 -
lombok.accessors.fluent
= [true
|false
] (預設值:false) - 如果設定為
true
,任何沒有@Accessors
註解的欄位/類別,或者有註解但該註解沒有fluent
參數的明確值,都將表現得如同存在@Accessors(fluent = true)
一樣。 -
lombok.accessors.makeFinal
= [true
|false
] (預設值:false) - 如果設定為
true
,任何沒有@Accessors
註解的欄位/類別,或者有註解但該註解沒有makeFinal
參數的明確值,都將表現得如同存在@Accessors(makeFinal = true)
一樣。 -
lombok.accessors.prefix
+= 欄位前綴 (預設值:空列表) - 這是一個列表屬性;可以使用
+=
運算子新增項目。可以使用-=
運算子移除從父配置檔案繼承的前綴。任何沒有@Accessors
註解的類別,或者有註解但該註解沒有prefix
參數的明確值,都將表現得如同存在@Accessors(prefix = {配置中列出的前綴})
一樣。 -
lombok.accessors.capitalization
= [basic
|beanspec
] (預設值:basic) - 控制如何將像
uShaped
(一個小寫字母後跟一個大寫/首字母大寫字母) 這樣的棘手情況大寫。basic
將其大寫為getUShaped
,而beanspec
則將其大寫為getuShaped
。
這兩種策略在 java 生態系統中都很常用,儘管beanspec
更常見。 -
lombok.accessors.flagUsage
= [warning
|error
] (預設值:未設定) - 如果配置了,Lombok 會將任何
@Accessors
的使用標記為警告或錯誤。
小字印刷
最接近的 @Accessors
註解也用於 lombok 中尋找 getter 的各種方法,例如 @EqualsAndHashCode
。
如果提供了前綴列表,並且欄位沒有以其中一個前綴開頭,則 lombok 將完全跳過該欄位,並產生警告。