使用Lombok中的@Builder代替传统对象赋值
Posted 田间稻草人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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
使用了构造者模式,屏蔽了里面的构造细节。
缺点
- 使用构建器的时候,必须利用另外一个类来实例化另外一个类,这样子会使创建的时候创建更多的对象,很明显额外占用了内存。
- 子类Builder对象无法修改父类的属性
当需要修改原对象的属性值,需要在@Builder
注解后加上toBuilder = true
@Builder(toBuilder = true)
使用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代替传统对象赋值的主要内容,如果未能解决你的问题,请参考以下文章
还在手写 Builder 模式?试试 Lombok 中的 @Builder 用法,太强了!
还在手写 Builder 模式?试试 Lombok 中的 @Builder 用法,太强了。。
还在手写 Builder 模式?试试 Lombok 中的 @Builder 用法,太强了。。