欲穷千里目,更上一层楼。
什么是Builder?
喜欢阅读书籍的朋友们一定对@Builder
有印象,«Effective Java»中第一章 讲的就是关于 Builder 构造器的事情。
Builder 相对于无参构造器 和有参构造器 有很多优点。
在有参的情况,Builder 构造器可以:有名字。
例如,这里有一个bean:
public class MyBean{
private Integer num;
private String msg;
// 省略若干字段 ...
// 构造器 和 builder 代码省略
// ......
}
如果我们有一个全参构造器,使用全参构造器构造对象的时候,会是这个样子:
MyBean bean = new MyBean(1,"hi");
如果参数很多的情况下,使用全参构造器可能会是这个样子:
MyBean example = new MyBean(1,2,3,4,5,6,"str1","str2","str3");
即使是idea等ide工具有提示信息,也很难理解且可读性很差。
而使用Builder就不一样了:
MyBean autuanBean = MyBean.builder()
.num(1)
.age(2)
.tip("str1")
.address("str2")
.build();
可读性就非常好,推荐大家使用Builder构造器。
使用 builder
使用builder构造器时,最好是和lombok配合,没有lombok的话,我们需要手动的写builder代码,会带来极大的效率下降。
在pom中引用maven依赖:
<lombok.version>1.18.6</lombok.version>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
请注意,lombok的版本最低是1.18.2 ,如果再低,就不支持@Builder
引入了lombok后,便可以使用@Builder注解了
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MyBean{
private Integer num;
private String msg;
// 省略若干字段 ...
}
其中:
- @Data 为类添加 Getter/Setter/ToString 等方法
- @Builder 本文的主要内容:为类添加 Builder 构造器
- @NoArgsConstructor 为类添加一个无参构造器
- @AllArgsConstructor 为类添加一个全参构造器
愿大家可以不断的优化自己的代码。 :-)