@NoArgsConstructor 为类生成无参构造方法,若类已定义其他构造方法则需显式设置 force = true 才强制生成,并将 final 字段初始化为默认值;支持通过 access 指定访问级别,默认 public。

在 Java 中,Lombok 的 @NoArgsConstructor 注解会为类自动生成一个无参构造方法(即不带任何参数的构造函数),前提是该类没有显式定义其他构造方法。如果类中已存在其他构造方法(比如有参构造、全参构造等),Lombok 默认不会再生成无参构造方法,除非你显式启用 force = true。
@NoArgsConstructor 的基本用法
直接在类上添加注解即可:
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private String name;
private int age;
}编译后,Lombok 会生成一个类似这样的构造方法:
public User() {
}这个构造方法是 public 的(默认访问级别),且不执行任何逻辑(不会初始化字段)。
立即学习“Java免费学习笔记(深入)”;
当类已有其他构造方法时怎么办?
如果你同时用了 @AllArgsConstructor 或手动写了有参构造,Lombok 默认不会叠加生成无参构造。此时需要显式设置 force = true:
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@NoArgsConstructor(force = true)
@AllArgsConstructor
public class User {
private String name;
private int age;
}force = true 的作用是:
- 即使类中已有其他构造方法,也强制生成一个
public的无参构造; - 同时,它还会将所有
final字段初始化为默认值(如null、0、false),避免编译错误。
⚠️ 注意:force = true 不代表“安全”,它可能让 final 字段变成 null,需确保业务逻辑能容忍。
控制访问权限
默认生成 public 构造方法,但你可以指定访问级别:
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
private String name;
}支持的选项有:
-
AccessLevel.PUBLIC(默认) -
AccessLevel.PROTECTED -
AccessLevel.PACKAGE(包级私有) AccessLevel.PRIVATE
常见陷阱与建议
- 如果类中有
final字段且未初始化,又没写构造方法,Lombok 生成无参构造时会报错;此时要么初始化字段(如private final String name = "";),要么用force = true; - Spring Boot 的
@ConfigurationProperties、JPA 实体、JSON 反序列化(如 Jackson)常依赖无参构造,务必确认它确实被生成; - 使用 IDE(如 IntelliJ)时,确保安装了 Lombok 插件,并开启 annotation processing;
- 编译时若看不到生成的构造方法,可查看编译后的字节码(或启用
-Dlombok.debug=true查看日志)。
不复杂但容易忽略。


















