Lombok @Constructor 系列注解:轻松生成类的构造方法
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战(问答机器人、RAG 增强检索、联网搜索)》 正在持续爆肝中,基于
Spring AI + Spring Boot 3.x + JDK 21...,点击查看 ; - 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍 ; 演示链接: http://116.62.199.48:7070/ ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 110w+ 字,讲解图 4421+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 4000+ 小伙伴加入学习 ,欢迎点击围观
Lombok 提供了一系列构造器注解,帮助开发者轻松生成构造方法。主要包括 @NoArgsConstructor、@AllArgsConstructor 和 @RequiredArgsConstructor,可以根据需要自动生成无参、全参或指定参数的构造器。
@NoArgsConstructor
@NoArgsConstructor 注解用于生成一个无参构造方法。在某些框架中(如 JPA 或 Spring)需要无参构造器,这个注解非常有用。
示例
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class User {
private String name;
private int age;
}
这段代码会生成一个无参构造方法:
public User() {
super();
}
强制初始化 final 字段
如果类中包含 final 字段,@NoArgsConstructor 默认无法生成构造方法,除非添加 force=true 参数,使 final 字段自动初始化为默认值:
@NoArgsConstructor(force = true)
public class User {
private final String name;
private int age;
}
这将生成一个无参构造器,并将 name 初始化为空字符串或其他默认值。
@AllArgsConstructor
@AllArgsConstructor 用于生成包含所有字段的构造方法,可以轻松创建带有完整数据的对象。
示例
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class User {
private String name;
private int age;
}
这段代码会生成如下构造方法:
public User(String name, int age) {
this.name = name;
this.age = age;
}
使用 @AllArgsConstructor 创建对象时,可以一次性指定所有字段的值。
@RequiredArgsConstructor
@RequiredArgsConstructor 用于生成包含 “必需” 字段的构造方法。这里的 “必需” 字段指的是那些 final 或带有 @NonNull 注解的字段。其他字段不会包含在构造方法中。
示例
import lombok.RequiredArgsConstructor;
import lombok.NonNull;
@RequiredArgsConstructor
public class User {
@NonNull
private String name;
private int age;
}
这段代码会生成如下构造方法:
public User(String name) {
this.name = name;
}
只有 name 字段会被包含在构造方法中,因为它被 @NonNull 标注。未被 @NonNull 标注的字段 age 将不会包含在 @RequiredArgsConstructor 生成的构造方法中。
多个构造器的组合
Lombok 允许将这些注解组合使用,比如同时使用 @NoArgsConstructor 和 @AllArgsConstructor,这样类会既有无参构造器,也有全参构造器。
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
这样可以根据需求选择不同的构造方式。
小结
Lombok 的构造器注解系列大大简化了构造方法的编写:
@NoArgsConstructor生成无参构造器,适合依赖框架的场景。@AllArgsConstructor生成全参构造器,便于快速创建对象。@RequiredArgsConstructor仅生成包含final和@NonNull字段的构造器,适合强制要求某些字段必须赋值的场景。
通过合理使用这些注解,可以根据项目需求自动生成所需的构造方法,提升开发效率并减少样板代码。