@FieldNameConstants
命名... 那个... 字段!用于您的字段名称的字符串常量。
@FieldNameConstants 在 lombok v1.16.22 中作为实验性功能引入。
@FieldNameConstants 在 lombok v1.18.4 中重新设计。
lombok.config 选项 lombok.fieldNameConstants.uppercase = true
在 lombok v1.18.8 中添加。
实验性
实验性的原因- 新功能;不确定是否减少了足够的样板代码。
概述
@FieldNameConstants
注解生成一个内部类型,其中包含类中每个字段的 1 个常量;可以是字符串常量(标记为 public static final
,类型为 java.lang.String
的字段),或者如果您喜欢,可以使用枚举类型,每个字段对应一个值 - 写入 @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
的。
必须应用于类(或枚举,尽管您很少会这样做)。默认情况下,包括所有非瞬态、非静态字段。您可以在字段中使用 @FieldNameConstants.Include
+ @FieldNameConstants(onlyExplicitlyIncluded = true)
,或者使用 @FieldNameConstants.Exclude
进行更细粒度的控制。
使用 Lombok
import lombok.experimental.FieldNameConstants;
|
原生 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")})
。