@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")})。