简述:Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。
使用:一般单独进行使用,如果需要和@Data一起使用,为避免造成不必要错误。推荐下面四个注解一起使用。

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor

简单使用:

注意:对于目标类中的所有的属性和未初始化的final字段,才会在构建器中创建对应属性。(所以下面没有.code()赋值)

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private final Integer code = 200;private String username;private String password;
}
System.out.println(User.builder().username("hecc").password("hecc").build());

泛型使用:

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User<T> {private final Integer code = 200;private String username;private String password;private List<T> roles;
}
System.out.println(User.<String>builder().username("hecc").password("hecc").role(Lists.newArrayList("admin")).build());

@Builder中使用 @Singular 注释集合

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private final Integer code = 200;private String username;private String password;@Singularprivate List<String> roles;
}
//不添加
System.out.println(User.builder().username("hecc").password("hecc").build());
//单个添加
System.out.println(User.builder().username("hecc").password("hecc").role("admin").build());
//多次单个添加
System.out.println(User.builder().username("hecc").password("hecc").role("admin").role("read").build());
//一次性添加多个
System.out.println(User.builder().username("hecc").password("hecc").roles(Lists.newArrayList("admin","read")).build());
//搭配使用
System.out.println(User.builder().username("hecc").password("hecc").role("test").roles(Lists.newArrayList("admin","read")).build());
//还有个clearRoles()可以清空List集合里面的数值。

注意:
@Singular注解添加的额外方法使用的是集合名的单数形式。
例如:childrenInfos会生成childrenInfo;glasses会生成glass;children会生成child。
有时候属性名不规范或者无法识别时,@Singular就不知道生成啥样的,这个时候编译就报错,提示你:

Can’t singularize this name: “ssss”; please specify the singular explicitly (i.e. @Singular(“sheep”))

解决办法:
1.规范命名,采用复数,比如roles。
2.@Singular(value="XXX"),给单个添加取个别名,这样你取的XXX就是单个添加的,被注解修饰的就是集合形式添加的。

@Singular注解的value属性,可以更改调用的方法名,如:

@Singular(value = "test")
private List<String> roles;

这样就是用.test("admin")赋值了,但是注意:添加一个集合的方法名没有发生改变,还是.roles(List集合)

        System.out.println(User.builder().username("hecc").password("hecc").test("admin").roles(Lists.newArrayList("test")).build());

@Builder.Default 的使用

在类中我在id和insertTime上都添加注解@Builder.Default,当我在使用这个实体对象时,我就不需要在为这两个字段进行初始化值。如果赋值,就会覆盖原有的赋值。

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private final Integer code = 200;private String username;private String password;@Singular(value = "test")private List<String> roles;@Builder.Defaultprivate String id = UUID.randomUUID().toString();@Builder.Defaultprivate long insertTime = System.currentTimeMillis();
}
System.out.println(User.builder().username("hecc").password("hecc").test("admin").build());
System.out.println(User.builder().username("hecc").password("hecc").test("admin").id("admin").insertTime(123).build());

@Builder使用相关推荐

  1. 使用 Flash Builder 的 Apple iOS 开发过程

    使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建.调试或部署 iOS 应用程序前的准备工作 在测试.调试或安装 iOS 应用程序时选择的文件 将应用 ...

  2. Unity Pro builder创建模块化仓库建筑学习教程

    Unity内部的专业3D编辑工作室 你会学到: 直接在Unity内部学习3D建模 使用专业构建器的专业方法 为您的游戏创建模块化资产 了解如何为您的三维模型设置纹理 三维资产的模块化布局 专业后期制作 ...

  3. Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

    Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 ...

  4. Platform Builder 5下WinCE 5.0目录结构

    Platform Builder 5下WinCE 5.0目录结构 Platform Builder 5已经自带WinCE 5.0,安装过程会指定WinCE 5.0的安装路径,默认为X:\WINCE50 ...

  5. 设计模式之C#实现---Builder

    作者:cuike519的专栏   http://blog.csdn.net/cuike519/ 我们将要介绍一个和它比较像的创建型模式 Builder (至于关于 Builder 的详细内容您可以参考 ...

  6. 设计模式之建造者模式(生成器模式、Builder)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  7. wxpython有没有可视化设计_wxPython - GUI Builder工具( GUI Builder Tools)

    wxPython - GUI Builder工具( GUI Builder Tools) 通过手动编码创建美观的GUI可能很乏味. 可视化GUI设计器工具总是很方便. 许多针对wxPython的GUI ...

  8. Myeclipse 8.0 +Flash builder 4 plugin 的实现

    其实过程非常,简单,但是我之前在网上找了很多资料都说,需要先装 Eclipse 3.5 ,然后安装MyEclipse 8.0的插件到Eclipse,最后再安装Flash builder 的插件,期间还 ...

  9. adoquery查询结果如何赋给一个变量(delphi和c++ builder)

    我用的是adoquery进行数据库查询,但是我不想把查询的结果显示出来,只是想赋给一个变量,请问我这个变量该怎样去设置呢 ?  回复人:sunriver 回复时间:2005-6-3 9:11:00 p ...

  10. 你还在new对象吗?Java8通用Builder了解一下?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:cipher www.ciphermagic.cn/java ...

最新文章

  1. c++ 多重背包状态转移方程_背包问题之零钱兑换
  2. 关于UNION ALL与 UNION 用法和区别
  3. python热成像_在python中自动从图像中移除热/死像素
  4. 软件过程改进之百科名片
  5. web service接口_win7 添加环回网卡+H3C 模拟器 防火墙开启Web功能
  6. 快速学习一个新的模块
  7. 绿盟漏洞扫描_主机安全漏洞解决方案
  8. MyCAT全局序列号-数据库方式
  9. gdal库的三个使用心得
  10. 泛函编程(4)-深入Scala函数类
  11. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
  12. cookie不正确 请重新登录_小学多陪,初中少陪,高中不陪!小学6年陪孩子写作业的正确方式,请家长收下!...
  13. MCU_ZigBee协议栈相关函数总结
  14. 信息编码的运用——如何用二进制改图
  15. BCT4157/4157B是一种高带宽、快速单刀双掷(SPDT)CMOS开关
  16. Android虚拟机的安装
  17. 《进击的虫师》爬取豆瓣电影海报Top250(2020年10月23日更新)
  18. 转:Flutter做出剑气效果
  19. Linux 系统编程笔记-(1)基本概念
  20. 浅谈程序环境和预处理

热门文章

  1. 【NEON Intrincics加速计算案例】使用neon加速计算视频FullRange转LimitedRange
  2. load 和 loads的区别
  3. 微信公众号之验证码推送(spring-boot+测试号)
  4. 【人生就是一场直播】有感
  5. 采集地图哪个软件好(采集地图哪个软件好用)
  6. ubuntu错误dpkg:error processing realplay
  7. 【设计模式】我终于读懂了观察者模式。。。
  8. android view上下滚动条,Android自定义View六(ViewGroup水平垂直滚动实现类似支付宝年度账单的效果)...
  9. 物联网之场景联动策略
  10. 数据预处理过程中处理方法