Lombok 使用教程-@FieldDefaults | 通过Lombok设置字段默认值

作者简介:大家好,我是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下的验证结果当作最终结果的水货们请闭嘴】

一、实验性功能说明

@FieldDefaults是在lombok v0.11.4中作为实验性功能引入的。

实验原因:

  • 新功能;不确定这是否破坏了足够的模板。
  • 如果您可以将其粘贴在package-info.java包上以设置该包中所有类的默认值,那就太好了。
  • @Value 的部分工作,这是实验性的。

当前状态:积极 - 目前我们认为此功能可能会很快退出实验状态,不会发生变化或发生微小变化。

二、简介

@FieldDefaults注解可以为被注解的类或枚举中的每个字段添加访问修饰符(publicprivate, 或 protected)。它还可以为注释的类或枚举中的每个字段添加final

要给每个(实例)字段添加final,使用@FieldDefaults(makeFinal=true)。任何必须保持非final的字段可以用@NonFinal(也在lombok.experimental包中)来注释。

要给每个(实例)字段添加一个访问修饰符,请使用@FieldDefaults(level=AccessLevel.PRIVATE)。任何还没有访问修饰符的字段(即任何看起来像包私有访问的字段)都被改变为具有适当的访问修饰符。任何必须保持包私有的字段都可以用@PackagePrivate来注释(也在lombok.experimental包中)。

三、示例比较

1. Lombok 写法

    import lombok.AccessLevel;
    import lombok.experimental.FieldDefaults;
    import lombok.experimental.NonFinal;
    import lombok.experimental.PackagePrivate;
    
    @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)
    public class FieldDefaultsExample {
      public final int a;
      int b;
      @NonFinal int c;
      @PackagePrivate int d;
      
      FieldDefaultsExample() {
        a = 0;
        b = 0;
        d = 0;
      }
    }

2. Java 标准写法

    
    public class FieldDefaultsExample {
      public final int a;
      private final int b;
      private int c;
      final int d;
      
      FieldDefaultsExample() {
        a = 0;
        b = 0;
        d = 0;
      }
    }

四、支持的配置项

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

lombok.fieldDefaults.defaultPrivate = [true | false] (默认: false)
(自1.16.8起)如果设置为 “true”,被编译的源中的每个类或枚举中的每个字段都将被标记为私有,除非它有一个明确的访问修改器或@PackagePrivate注解,或者有一个明确的@FieldDefaults注解来覆盖这个配置键。

lombok.fieldDefaults.defaultFinal = [true | false] (默认: false)
(自1.16.8起)如果设置为 “true”,被编译的源中的每个类或枚举中的每个字段都将被标记为final,除非它有@NonFinal注释,或者有明确的@FieldDefaults注释来覆盖这个配置键。

五、附属说明

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

参考文献

【1】@FieldDefaults | New default field modifiers for the 21st century.

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值