【Lombok】@FieldDefaults | 通过Lombok设置字段默认值

一、实验性功能说明

@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.

### 回答1: @NoArgsConstructor 注解是 Lombok 框架中的一个注解,用于为类生成一个无参构造函数。当类中没有定义任何构造函数时,编译器会默认生成一个无参构造函数,但如果你定义了有参构造函数或者静态工厂方法,这个默认的无参构造函数就不会被生成。在这种情况下,如果你还需要一个无参构造函数,你就需要手动编写一个,或者使用 @NoArgsConstructor 注解自动生成。 使用方法: ``` import lombok.NoArgsConstructor; @NoArgsConstructor public class Example { ... } ``` 在上面的例子中,编译器会为 Example 类生成一个无参构造函数。 ### 回答2: lombok的@NoArgsConstructor是一个注解,在Java代码中使用可以便捷地生成无参构造方法。在编写Java类时,通常需要为每个类添加构造方法,以便在创建对象时进行初始化操作。然而,当类中没有任何构造方法时,使用lombok的@NoArgsConstructor注解可以自动生成一个无参构造方法。 使用@NoArgsConstructor注解非常简单,只需在类上添加该注解即可。在编译过程中,lombok会根据类中的成员变量来生成对应的无参构造方法。生成的无参构造方法会初始化类中的所有成员变量,并将其设置默认值。 有一些场景下非常适合使用@NoArgsConstructor注解。例如,当我们需要创建一个简单的POJO(Plain Old Java Object)类来存储一些数据时,使用@NoArgsConstructor可以使我们代码更简洁。此外,在使用一些框架或工具时,有些会要求类必须提供无参构造方法,此时使用@NoArgsConstructor注解能够满足这些需求。 需要注意的是,使用@NoArgsConstructor注解生成的无参构造方法可能会导致一些隐藏的问题。当类中存在final字段或者使用了@NonNull注解的字段时,lombok将无法生成对应的无参构造方法。此外,如果一个类有多个构造方法时,使用@NoArgsConstructor注解会覆盖掉原有的构造方法,使得只有无参构造方法可以被调用。 总之,lombok的@NoArgsConstructor注解能够快速生成一个无参构造方法,使得代码更加简洁。然而,在使用时需要注意一些潜在的问题,以确保生成的构造方法符合开发需求。 ### 回答3: Lombok是一个Java开发库,可以通过简化代码来减少Java开发者的工作量。其中之一的注解是@NoArgsConstructor,它可以为Java类自动生成无参数的构造方法。 通常情况下,我们在Java类中定义了带有参数的构造方法后,默认的无参构造方法就会被隐藏。但是,在某些情况下,我们仍然希望能够使用无参构造方法来创建对象。 使用@NoArgsConstructor注解,可以自动生成一个无参构造方法。这意味着无需手动编写该构造方法,而是让Lombok自动帮我们生成。无参构造方法的好处在于它可以方便地创建对象实例,特别是在一些框架和工具中,如反序列化、通过反射创建对象等。 此外,使用@NoArgsConstructor注解还可以在一些其他场景中带来方便。例如,当我们在测试代码中需要创建一个对象实例时,使用无参构造方法可以简化测试的编码过程。 @NoArgsConstructor注解还有一些可选的参数,例如access参数可以指定生成构造方法的可见性(private、protected、public等)。此外,还可以使用参数force来强制生成无参构造方法,即使在类中也定义了其他构造方法。 总的来说,Lombok的@NoArgsConstructor注解可以为Java类自动生成无参构造方法,提供了在多种场景下创建对象实例的方便性,并且可以通过一些可选参数来灵活地控制生成的构造方法的可见性和行为。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值