@FieldNameConstants
為你的欄位名稱命名... 字串常數!
@FieldNameConstants 在 lombok v1.16.22 版本中作為實驗性功能引入。
@FieldNameConstants 在 lombok v1.18.4 版本中重新設計。
在 lombok v1.18.8 版本中新增了 lombok.config 選項 lombok.fieldNameConstants.uppercase = true
。
實驗性
實驗性功能是因為- 新功能;不確定是否能減少足夠的樣板程式碼。
概觀
@FieldNameConstants
注解會產生一個內部型別,其中包含類別中每個欄位的 1 個常數;可以是字串常數(標記為 public static final
,型別為 java.lang.String
的欄位),或者如果您喜歡,可以使用列舉型別,每個欄位包含 1 個值 - 為列舉變體寫入 @FieldNameConstants(asEnum = true)
。@FieldNameConstants
對於各種序列化和反序列化框架非常有用。常數欄位(無論是列舉值還是字串常數)始終與欄位名稱完全相同,包括大小寫,除非您在 lombok.config
檔案中設定 lombok.fieldNameConstants.uppercase = true
選項;在這種情況下,lombok 將嘗試將名稱 UPPER_CASE
化。
預設情況下,產生的內部型別稱為 Fields
且為 public
。您可以透過 @FieldNameConstants(innerTypeName = "FieldNames", level = AccessLevel.PACKAGE)
等方式修改它。預設的內部型別名稱也可以透過組態金鑰 lombok.fieldNameConstants.innerTypeName
修改。產生的欄位始終為 public
。
必須應用於類別(或列舉,儘管您很少會想這樣做)。預設情況下,包含所有非 transient、非 static 的欄位。您可以使用欄位中的 @FieldNameConstants.Include
+ @FieldNameConstants(onlyExplicitlyIncluded = true)
,或 @FieldNameConstants.Exclude
來進行更細緻的控制。
使用 Lombok
import lombok.experimental.FieldNameConstants;
|
Vanilla Java
public class FieldNameConstantsExample {
|
支援的組態金鑰
-
lombok.fieldNameConstants.flagUsage
= [warning
|error
] (預設值:未設定) - 如果已設定,Lombok 會將任何
@FieldDefaults
的使用標記為警告或錯誤。 -
lombok.fieldNameConstants.innerTypeName
= 字串 (預設值:'Fields') - 由 lombok 產生的內部型別名稱可以使用此組態金鑰控制。
-
lombok.fieldNameConstants.uppercase
= [true
|false
] (預設值:false) - 如果為
true
,則嘗試將產生的欄位轉換為大寫。
小字說明
從 lombok v1.18.6 開始,lombok 將會靜默跳過產生任何已存在的內容。您可以自行定義內部 Fields
列舉/類別,在這種情況下,lombok 將會新增您尚未自行撰寫的所有列舉常數 / public static final 欄位。
從 lombok v1.16.22 到 lombok v1.18.2,此功能直接在型別內產生常數;例如,這些欄位的名稱會將欄位 exampleFieldName
轉換為 public static final String FIELD_EXAMPLE_FIELD_NAME = "exampleFieldName";
。字首和字尾(此處為 FIELD_
和空字串)是可設定的。從 lombok v1.18.4 開始,此功能已重新設計為產生如上所述的內部型別。
任何 lombok 注解的參數,若接受字串,則需要提供實際的字串字面值;您不能引用像 @FieldNameConstants
產生的常數。如果您想使用 @FieldNameConstants
來填寫 @ToString
和類似 lombok 注解的 of
和/或 exclude
參數,請改用 @ToString.Include
/ @ToString.Exclude
等系統;這些系統在這些功能的特性頁面中有所描述。
就像其他處理欄位的 lombok 處理器一樣,任何名稱以美元符號 ($
) 開頭的欄位都會被完全跳過。這樣的欄位將完全不會被修改。靜態欄位也會被跳過。
MapStruct 互操作性: 當在 MapStruct 的 @Mapping
內部引用欄位名稱常數,並且您在一個節點上多次使用該註解時,您必須手動將它們包裝在 @Mappings
'容器註解' 中。 就像這樣: @Mappings({@Mapping(target = Entity.Fields.entityProperty, source = "dtoProperty")})
。