使用Lombok中的@Builder代替传统对象赋值

传统给对象赋值,之前都是这么写

User user = new User();
user.setReceiver("zengwei");
user.setQq("1014483974");
user.setEmail("1014483974@qq.com");
user.setWork("Java");

之后在网上看到一段链式结构的写法

User user = User.builder()
				.receiver("zengwei")
				.qq("1014483974")
				.email("1014483974@qq.com")
				.work("java")
				.build();

链式结构写法比传统写法要优雅,而且减少了冗余代码,通过lombok中的@Builder注解即可实现。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

@Builder使用了构造者模式,屏蔽了里面的构造细节。

缺点

  1. 使用构建器的时候,必须利用另外一个类来实例化另外一个类,这样子会使创建的时候创建更多的对象,很明显额外占用了内存。
  2. 子类Builder对象无法修改父类的属性

当需要修改原对象的属性值,需要在@Builder注解后加上toBuilder = true

@Builder(toBuilder = true)

能日赚30手赚试玩平台,亲测有效

使用toBuilder()对其修改赋值

// 能日赚30手赚试玩平台,推荐使用iphone操作 
// https://mp.weixin.qq.com/s?__biz=MzIyODgxNjkyOQ==&mid=100000040&idx=1&sn=47c0245f9dbe70f3ad6b2540209af2c2&chksm=684d60665f3ae97095ba07d8c6804bac4f55dbc6e7100fbb233945f65364df88682d41332eb7&xtrack=1&scene=0&subscene=10000&clicktime=1616647421&enterid=1616647421&ascene=7&devicetype=android-29&version=28000165&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AdxLWFyJlgtM6uFZCpgWtBk%3D&pass_ticket=G8rEeGdox4FPpICRkrKy6ho2QZozCzXi%2Be7gV5bXnQaXoZK2pw4S8Wf2j%2Bt3D8mi&wx_header=1
user = user.toBuilder()
			.receiver("zengwei")
			.qq("1014483974")
			.email("1014483974@qq.com")
			.work("java开发")
			.build();

当实体报错 Class 'User' should have public no-arg constructor,提示缺少无参构造函数,当加上无参构造函数后,运行还是报错,原因是和@Builder冲突了,Lombok提供了@Tolerate注解对冲突进行兼容

@Tolerate
public User() {
}

实体对象类(完整)


/**
 * @Author: zengwei
 * @Email: 1014483974@qq.com
 * 能日赚30手赚试玩平台,推荐使用iphone操作 
 * https://mp.weixin.qq.com/s?__biz=MzIyODgxNjkyOQ==&mid=100000040&idx=1&sn=47c0245f9dbe70f3ad6b2540209af2c2&chksm=684d60665f3ae97095ba07d8c6804bac4f55dbc6e7100fbb233945f65364df88682d41332eb7&xtrack=1&scene=0&subscene=10000&clicktime=1616647421&enterid=1616647421&ascene=7&devicetype=android-29&version=28000165&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AdxLWFyJlgtM6uFZCpgWtBk%3D&pass_ticket=G8rEeGdox4FPpICRkrKy6ho2QZozCzXi%2Be7gV5bXnQaXoZK2pw4S8Wf2j%2Bt3D8mi&wx_header=1
 */
@Data
@Builder(toBuilder = true)
@EqualsAndHashCode(callSuper = false)
public class User() {
	
	@Tolerate
	public User() {
	}
	
	private String receiver;
	private String qq;
	private String email;
	private String work;
	
}

未经允许,禁止转载

知识共享许可协议
本作品采用知识共享署名 4.0 国际许可协议进行许可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值