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 字段的构造器,适合强制要求某些字段必须赋值的场景。

通过合理使用这些注解,可以根据项目需求自动生成所需的构造方法,提升开发效率并减少样板代码。