Lombok 使用教程-@FieldNameConstants | 为你的字段生成一个以字段名称为值的常量

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

一、实验性功能说明

@FieldNameConstantslombok v1.16.22中作为实验性功能引入。

@FieldNameConstantslombok v1.18.4中被重新设计。

lombok.config选项lombok.fieldNameConstants.uppercase = true被添加到lombok v1.18.8中。

实验原因:

  • 新功能;不确定这是否破坏了现有的模板。

当前状态:中立 - 作为一个刚刚推出的功能,仍在收集反馈。

二、简介

@FieldNameConstants注解生成了一个内部类型,它为你的类中的每个字段包含一个常量;或者是字符串常量(字段标记为public static final,类型为java.lang.String),或者如果你愿意,一个枚举类型,每个字段有一个值–为枚举变体编写@FieldNameConstants(asEnum = true)@FieldNameConstants对于各种调度和序列化框架很有用。常量字段(无论是枚举值还是字符串常量)的名字总是和字段一模一样的,包括大写和所有,除非你在lombok.config文件中设置了lombok.fieldNameConstants.uppercase = true选项;在这种情况下,lombok会尝试将名字变成大写字母。

生成的内部类型默认叫做Fields,是public。你可以通过@FieldNameConstants(innerTypeName = "FieldNames", access = AccessLevel.PACKAGE)来修改,例如。默认的内部类型名称也可以通过配置键lombok.fieldNameConstants.innerTypeName修改。生成的字段总是public

必须应用于类(或枚举,虽然你很少想这么做)。默认包括所有非瞬时的、非静态的字段。你可以在字段中使用@FieldNameConstants.Include + @FieldNameConstants(onlyExplicitlyIncluded = true),或者使用@FieldNameConstants.Exclude进行更细粒度的控制。

三、示例比较

1. Lombok 写法

    import lombok.experimental.FieldNameConstants;
    import lombok.AccessLevel;
    
    @FieldNameConstants
    public class FieldNameConstantsExample {
      private final String iAmAField;
      private final int andSoAmI;
      @FieldNameConstants.Exclude private final int asAmI;
    }

2. Java 标准写法

    public class FieldNameConstantsExample {
      private final String iAmAField;
      private final int andSoAmI;
      private final int asAmI;
      
      public static final class Fields {
        public static final String iAmAField = "iAmAField";
        public static final String andSoAmI = "andSoAmI";
      }
    }

四、支持的配置项

lombok.fieldNameConstants.flagUsage = [warning | error] (默认: not set)
Lombok@FieldDefaults的任何使用标记为警告或错误(如果已配置)。

lombok.fieldNameConstants.innerTypeName =一个字符串(默认: ‘Fields’)
lombok生成的内部类型的名称可以通过这个配置键来控制。

lombok.fieldNameConstants.uppercase = [true | false] (默认: false)
如果为true,则尝试将生成的字段大写。

五、附属说明

lombok v1.18.6开始,lombok会自动跳过生成已经存在的东西。你可以自己定义内部的Fields枚举/类,在这种情况下,lombok会添加所有你没有自己写的enum constants / public static final fields

lombok v1.16.22lombok v1.18.2,这个功能在类型内部直接生成常量;例如,这些字段的名称会把字段exampleFieldName变成public static final String FIELD_EXAMPLE_FIELD_NAME = "exampleFieldName";。前缀和后缀(这里是FIELD_,以及空字符串)是可配置的。从lombok v1.18.4开始,这个功能已经被重新设计为生成一个上述的内部类型。

任何接受字符串的lombok注解的参数都需要提供实际的字符串文本;你不能引用由@FieldNameConstants生成的常数。如果你想使用@FieldNameConstants来填写@ToString和类似的lombok注解的参数或排除参数,请使用@ToString.Include / @ToString.Exclude等系统来代替;这些在这些功能的页面上有描述。

像其他接触字段的lombok处理程序一样,任何名字以美元($)符号开头的字段都会被完全跳过。这样的字段根本就不会被修改。静态字段也会被跳过。

参考文献

【1】@FieldNameConstants | Name… that… field! String constants for your field’s names.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值