Lombok @Constructor 系列注解:轻松生成类的构造方法
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 72w+ 字,讲解图 3103+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2400+ 小伙伴加入学习 ,欢迎点击围观
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
字段的构造器,适合强制要求某些字段必须赋值的场景。
通过合理使用这些注解,可以根据项目需求自动生成所需的构造方法,提升开发效率并减少样板代码。