@requiredargsconstructor 生成的构造方法只包含 final 字段和 @nonnull 标记的字段,按声明顺序排列参数,不重复添加,且不覆盖已有构造方法。

@RequiredArgsConstructor 是 Lombok 提供的一个注解,它会为类中所有 final 字段(以及用 @NonNull 标记的非 final 字段)自动生成一个构造方法。
哪些字段会被包含进生成的构造方法?
只有满足以下任一条件的字段才会被纳入构造参数:
- 被声明为
final的字段(无论是否初始化) - 被
@NonNull注解标记的字段(即使不是 final)
注意:如果字段既是 final 又被 @NonNull 标记,只算一次,不会重复添加参数。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
生成的构造方法长什么样?
Lombok 生成的是一个 全参构造方法,参数顺序默认按字段在类中声明的顺序排列。例如:
public class User {
private final String name;
private final int age;
private @NonNull String email;
}
会生成:
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
常见注意事项
- 不会为非 final 且无
@NonNull的字段生成参数 - 如果类已有显式定义的构造方法(哪怕只有一个),Lombok 不会再生成
@RequiredArgsConstructor对应的构造方法,除非加上@RequiredArgsConstructor(onConstructor_ = @__({@Inject}))等扩展配置 - 字段类型不能是泛型擦除后冲突的(比如两个不同泛型的 List),否则编译可能报错
- 若字段是基本类型(如
int),必须确保有值(final 基本类型必须在声明或构造块中初始化),否则编译不通过
和 @AllArgsConstructor 的区别
@RequiredArgsConstructor 只处理“必需”的字段(final + @NonNull),而 @AllArgsConstructor 会为所有字段生成构造方法,不管是否 final 或是否为空。更安全、更符合不可变设计原则。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










