Builder注解

lombok的使用

Posted by Autuan.Yu on October 13, 2020

欲穷千里目,更上一层楼。

什么是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 为类添加一个全参构造器

愿大家可以不断的优化自己的代码。 :-)