Lombok @FieldNameConstants 获取类的属性名称

需求

近日开发有个需求要获取类属性的名称,只是想简单便捷的调用下。

举例来说,一个实体类 User 含有 id 和 userName 两个属性,现在想要获取 “id” 和 “userName” 两个属性名的字符串。

偷懒思路

想到 Lombok 在通过注解简化实体类方面有不错的效果,所以想找下 Lombok 是否有什么注解方便实现本需求。

偷懒之路

经过百度+谷歌的检索定位到了 @FieldNameConstants 满足需求。

偷懒所得

@FieldNameConstants官网介绍

注意:

Lombok 不同版本对于注解 @FieldNameConstants 效果会有所不同,上面给出的官网下面的 Small print 章节给出了历史版本的迭代情况,本文使用的 Lombok 版本为 1.18.16

个人解析:

直接使用效果

抄袭官方代码Demo1


import lombok.experimental.FieldNameConstants;
import lombok.AccessLevel;

@FieldNameConstants
public class FieldNameConstantsExample {
  private final String iAmAField;
  private final int andSoAmI;
  // 添加 @FieldNameConstants.Exclude 这个注解表示该属性名不需要提供属性名
  @FieldNameConstants.Exclude 
  private final int asAmI;
  
}

抄袭官方Demo2 ,下面代码就是 Lombok 使用注解后最终 java 代码效果。本质上生成了一个内部类 Fields


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";
  }
}

用Junit调用

package lombok.fieldNameConstatns;


import org.junit.Test;

public class LombokConstantsTest {
    @Test
    public void constatnsTest(){

        System.out.println(FieldNameConstantsExample.Fields.iAmAField);
        //输出内容: iAmAField
        // 由于上个代码片段 asAmI 字段被  @FieldNameConstants.Exclude  注解修饰,所以无法被调用
        // System.out.println(FieldNameConstantsExample.Fields.asAmI);//获取不到 asAmI属性!!
    }
}

可以看到输出的字符串iAmAField跟声明的大小写是完全一致的。

一些定制需求
  1. 如果希望使用枚举类型: @FieldNameConstants(asEnum = true)
  2. 如果希望使用是全大写的输出结果,修改lombok配置,注解方式无法配置!
lombok.fieldNameConstants.uppercase = true
  1. 默认内部类名是 Fields ,而且是 public。如果想临时修改,可以使用注解配置:@FieldNameConstants(innerTypeName = "FieldNames", access = AccessLevel.PACKAGE); 如果想统一修改内部类名,可以修改 lombok 配置文件
lombok.fieldNameConstants.innerTypeName
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值