2024-01-10  阅读(2)
原文作者:猫巳 原文地址: https://moonce.blog.csdn.net/article/details/122123278

一、实验性功能说明

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

实验原因:

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

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

二、简介

@FieldDefaults注解可以为被注解的类或枚举中的每个字段添加访问修饰符(public, private, 或 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.


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文