Lombok @Builder 注解:流畅的构建者模式
一则小广告
最近,小哈正在带小伙伴做前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.2 + Vite 4
,手把手教学,前端 + 后端全栈开发,从 0 到 1 讲解每个功能开发过程,1v1 答疑,陪伴式直到项目上线,目前第六章 《Element Plus 手搭 Admin 后台管理骨架》已快完结,截止到目前,已更新 52 节内容,共计 81557 字,演示截图:433 张,持续更新中,后续还会上新更多项目,欢迎点击加入。
在构建复杂对象或者需要多个参数来构造对象的情况下,Builder 模式是一个非常有用的设计模式。然而,手动实现 Builder 模式可能会变得极其繁琐。幸运的是,Lombok 提供了一个非常强大的工具——@Builder 注解,可以帮助我们自动生成 builder 代码。
在本小节中,我们将会探讨如何使用 Lombok 的 @Builder 注解。
1. 什么是 Builder 模式
Builder 设计模式是一种创建型设计模式,主要解决了一些对象的构造过程中的问题。它提供了一种链式方法来创建一个复杂的对象。
2. Lombok @Builder 注解
Lombok 提供了 @Builder 注解,可以帮助我们简化 builder 模式的实现过程。
例如,考虑一个 User 类,包含 name、age 和 email 这三个字段。如果我们希望通过 Builder 模式创建 User 对象,那么可以这样做:
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private String name;
private int age;
private String email;
}
然后,我们可以通过下面的方式来创建 User 对象:
User user = User.builder()
.name("Tom")
.age(25)
.email("tom@example.com")
.build();
System.out.println(user);
这段代码会输出:User(name=Tom, age=25, email=tom@example.com )
从上面的例子可以看出,Lombok 生成了一个名为 builder 的静态方法,以及 name,age 和 email 的链式设置方法,最后通过 build 方法来构建 User 对象。
3. 使用 @Builder 在构造函数上
有时候,我们可能想要在构造函数上使用 @Builder 注解,这样我们就可以控制哪些字段需要在 builder 中出现。比如,我们可能有一个包含很多字段的类,但只希望部分字段可以通过 builder 来设置:
import lombok.Builder;
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
private String email;
@Builder
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
在上面的例子中,email 字段不会出现在 builder 中,我们只能设置 name 和 age。
4. Builder 模式与默认值
如果我们希望某些字段在 builder 模式中有默认值,我们可以在构造函数中设置:
import lombok.Builder;
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
private String email;
@Builder
public User(String name, int age) {
this.name = name;
this.age = age;
this.email = "default@example.com";
}
}
这样,除非我们在 builder 中显式地设置 email,否则 email 的值将默认为 "default@example.com "。
5. Builder 模式与 null 值
如果我们不想为某个字段设置值,那么这个字段的值就会默认为 null。例如,如果我们没有设置 email 的值,那么 email 的值就会是 null。
User user = User.builder()
.name("Tom")
.age(25)
.build();
System.out.println(user);
这段代码会输出:User(name=Tom, age=25, email=null)
在使用 builder 模式时,这是一个需要注意的地方,因为 null 值可能会引发 NullPointerException。
6. 总结
本小节中,我们了解了如何使用 Lombok 的 @Builder 注解,以及在使用中可能遇到的一些情况。Lombok 的 @Builder 注解是一个非常强大的工具,可以帮助我们简化 builder 模式的实现,从而使代码更加简洁,提高开发效率。
在使用的过程中,我们需要注意一些细节,比如默认值和 null 值的处理,以及在构造函数上使用 @Builder 注解来控制哪些字段需要在 builder 中出现。