Lombok @NoArgsConstructor, @RequiredArgsConstructor 和 @AllArgsConstructor 注解:轻松生成构造方法

更新时间 2023-07-26 16:45:51

一则小广告

最近,小哈正在带小伙伴做前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.2 + Vite 4,手把手教学,前端 + 后端全栈开发,从 0 到 1 讲解每个功能开发过程,1v1 答疑,陪伴式直到项目上线,目前第六章 《Element Plus 手搭 Admin 后台管理骨架》已快完结,截止到目前,已更新 52 节内容,共计 81557 字,演示截图:433 张,持续更新中,后续还会上新更多项目,欢迎点击加入

本小节中,我们将学习 Lombok 的三个构造器注解:@NoArgsConstructor, @RequiredArgsConstructor@AllArgsConstructor,这三个注解可以为你省去编写繁琐的构造方法的麻烦。

1. Lombok 构造方法注解是什么?

首先,让我们来了解一下这三个注解:

  • @NoArgsConstructor:这个注解会让 Lombok 为你的类生成一个无参数的构造方法。非常简单,对吧?
  • @RequiredArgsConstructor:这个注解稍微复杂一些,它会让 Lombok 为你的类生成一个构造方法,构造方法的参数是类中所有需要特殊处理的字段,也就是说,标记为 final@NonNull 的字段会被作为参数。
  • @AllArgsConstructor:这个注解会让 Lombok 为你的类生成一个包含所有字段的构造方法。

2. 如何使用这些注解?

Lombok 的注解用起来就像点菜一样容易。你只需要在你的类上添加这些注解,Lombok 就会按照你的要求为你生成相应的构造方法。下面我给大家演示一下:

import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;

@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class Student {
    @NonNull
    private String name;
    private final int age;
}

这个 Student 类,有两个字段:nameage。由于 name 字段标记了 @NonNullage 字段标记了 final,因此,Lombok 会生成以下三个构造方法:

  • 无参数的构造方法:public Student() { }
  • 包含所有特殊字段(nameage)的构造方法:public Student(String name, int age) { this.name = name; this.age = age; }
  • 包含所有字段的构造方法:public Student(String name, int age) { this.name = name; this.age = age; }

3. 自定义构造方法

当然,Lombok 还提供了一些选项,让你可以对生成的构造方法进行自定义。比如:

  • @NoArgsConstructor(force = true):当有 final 字段没有被初始化时,这个选项可以强制 Lombok 生成一个无参数的构造方法,并将所有 final 字段初始化为其默认值(0、false、null等)。
  • @AllArgsConstructor(access = AccessLevel.PROTECTED):这个选项可以用来改变生成的构造方法的访问级别。
  • @RequiredArgsConstructor(staticName = "of"):这个选项可以让 Lombok 为你生成一个静态的工厂方法,而不是一个构造方法。

4. 结语

Lombok 的这三个构造方法注解,帮助我们省去了大量编写构造方法的时间,让我们可以将更多的精力投入到业务逻辑的实现上。但请注意,尽管它们很方便,但如果使用不当,可能会引发一些难以预料的问题,比如忘记初始化 final 字段等。因此,我们在使用的时候,还需要注意这些细节问题。