码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-06-02 10:49:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:end   操作   ade   结构   写法   lang   sub   set   lsa   

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

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 国际许可协议进行许可。

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

标签:end   操作   ade   结构   写法   lang   sub   set   lsa   

原文地址:https://www.cnblogs.com/shiqiboy3974/p/14811578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!