zoukankan      html  css  js  c++  java
  • 使用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 国际许可协议进行许可。

  • 相关阅读:
    [转]HBASE 二级索引
    EPOCH, BATCH, INTERATION
    AMAZON数据集
    模拟ajax实现网络爬虫——HtmlUnit
    MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚
    maven: 打包可运行的jar包(java application)及依赖项处理
    webdriver 执行完毕关闭chromedriver进程
    windows下批量杀死进程
    系统进程死锁是什么原因如何让进程不死锁
    Data source rejected establishment of connection, message from server: "Too many connections"
  • 原文地址:https://www.cnblogs.com/shiqiboy3974/p/14811578.html
Copyright © 2011-2022 走看看