最全的 lombok 注解详情(随着版本不定时更新)

一、注解介绍

@Builder 注解为类生成相对略微复杂的构建器 API

  • 它作用于类,将其变成建造者模式
  • 可以以链的形式调用
  • 初始化实例对象生成的对象是不可以变的,可以在创建对象的时候进行赋值
  • 如果需要在原来的基础上修改可以加 set 方法,final 字段可以不需要初始化
  • 它会生成一个全参的构造函数

二、属性介绍

  • @Builder.Default:非 final 的字段可以有默认值

  • builderMethodName:指定创建内部静态类的方法名,默认值为 builder

  • buildMethodName:指定创建实体类的方法名,默认值为 build

  • builderClassName:指定内部静态的类名,默认值为 “”,默认创建的类名为 thisclassBuilder

  • toBuilder:设置为 true 可以对这个对象进行拷贝生成新的对象,可以再修改,默认为 false

  • access:设置 builderMethodName 的访问权限修饰符,默认为 public
    共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE,其中 MODULE 是 Java 9 的新特性

  • setterPrefix:设置 setter 方法的前缀,默认为 “”

三、实战演练

@Builder(builderMethodName = "builder", buildMethodName = "build", builderClassName = "",toBuilder = true, access = AccessLevel.PUBLIC, setterPrefix = ""
)
public class Yifei {@Builder.Defaultprivate String name = "刘亦菲";private String sex;private final Integer age = 18; // final 字段加不加 Default 都可以初始化成功public static void main(String[] args) {Yifei yifei = Yifei.builder().build();  // 如果没有加 Default,那么输出的 name 结果是 null。/*** 类似于拷贝,修改了 name 值,age 值还是原来的* 如果 toBuilder = false,则没有 toBuilder 方法*/yifei = yifei.toBuilder().name("刘亦菲").build();}
}
我们在平时开发中经常会用到泛型,而 @Builder 也支持指定泛型构建
@Builder
public class Yifei<T> {public void yiyang(Yifei<T> yi) {yi = Yifei.<T>builder().builder();}
}
@Builder 会生成一个全参构造方法,因此就没有了无参构造方法,但当我们遇到需要无参构造方法时就会发生问题,这个时候手写或者加上 @NoArgsConstructor 都会报错,两种解决方案
一、加上 @AllArgsConstructor
@Builder
@AllArgsConstructor
public class Yifei {public Yifei() {/*** 手写或者 @NoArgsConstructor 都会使 @Builder 生成的全参构造函数失效* 这个时候就被报错,加上 @AllArgsConstructor 或者手写一个全参构造函数即可*/}
}
二、使用 @Tolerate 注解

四、属性拓展

lombok 基础注解之 @Builder.ObtainVia

五、@Builder 内部做了什么

  • 创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类相同的属性(称为构建器)
  • 在构建器中:对于目标类中的所有的属性和未初始化的 final 字段,都会在构建器中创建对应属性
  • 在构建器中:创建一个无参的 default 构造函数
  • 在构建器中:实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用)
  • 在构建器中:会创建一个 build 方法,调用 build 方法,就会根据设置的值进行创建实体对象
  • 在构建器中:会生成一个 toString 方法
  • 在实体类中:会创建一个 builder 方法,它的目的是用来创建构建器
@Builder
public class User {private String username;private String password;
}
编译后
public class User {private String username;private String password;User(String username, String password) {this.username = username;this.password = password;}public static User.UserBuilder builder() {return new User.UserBuilder();}public static class UserBuilder {private String username;private String password;UserBuilder() {}public User.UserBuilder username(String username) {this.username = username;return this;}public User.UserBuilder password(String password) {this.password = password;return this;}public User build() {return new User(this.username, this.password);}public String toString() {return "User.UserBuilder(username=" + this.username + ", password=" + this.password + ")";}}
}

lombok 基础注解之 @Builder相关推荐

  1. lombok 基础注解之 @AllArgsConstructor

    最全的 lombok 注解详情(随着版本不定时更新) 一.注解介绍 作用于类,生成一个参数为所有实例变量的构造方法 二.属性介绍 staticName:使生成的构造方法是私有的,默认值 "& ...

  2. lombok 基础注解之 @EqualsAndHashCode

    最全的 lombok 注解详情(随着版本不定时更新) 一.注解介绍 作用于类,覆盖默认的 equals 和 hashCode 二.属性介绍 exclude:通过该属性可以排除某些字段 of:通过该属性 ...

  3. lombok 基础注解之 @NonNull

    最全的 lombok 注解详情(随着版本不定时更新) 一.注解介绍 作用于成员变量和参数中,标识变量不能为空,否则抛出空指针异常 二.实战演练 @Setter @Getter public class ...

  4. 20190905 Lombok常用注解

    Lombok常用注解 val 用于声明类型,将从初始化表达式推断出类型,仅适用于局部变量和foreach循环,而不适用于字段.声明的局部变量为final变量. Java自带类型推断随着JDK版本提升越 ...

  5. springboot依赖lombok插件、lombok常用注解

    --springboot依赖lombok插件.lombok常用注解 1 lombok插件 1.1 lombok插件简介 官方介绍如下: 意思是:lombok是一个能自动插入到编辑器和构建工具的java ...

  6. 夯实 Java 基础 - 注解

    夯实 Java 基础 - 注解 不知道大家有没有一种感觉,当你想要了解某个知识点的时候,就会发现好多技术类 APP 或者公众号在推一些关于这个知识点的文章.也许这就是大数据的作用,这也说明总有人比你抢 ...

  7. java builder父类,解决Lombok父类与子类Builder不兼容

    Lombok 是我们经常使用的插件,@Builder也是我们经常使用的注解,那你有没有遇见过如下错误呢? 父类与子类 Builder不兼容场景 Error:(16, 1) java: com.jdcl ...

  8. Spring基础专题——第十章(基础注解编程——下)

    目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从一个互联网职场小白到一个沪漂湿人,一路让我知道分享是一件多么重要的事情 ...

  9. Spring基础专题——第九章(基础注解编程——上)

    目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从一个互联网职场小白到一个沪漂湿人,一路让我知道分享是一件多么重要的事情 ...

最新文章

  1. JavaScript,JS如何控制input输入字符限制
  2. Oracle+Python适合 Oracle DBA 使用的 Python
  3. 向日葵win10远程linux主机,大神为你细说win10系统使用向日葵远程桌面软件远程的操作办法...
  4. leetcode——242. 有效的字母异位词
  5. 3.9 神经网络的梯度下降法
  6. 《VMware虚拟机实用宝典》繁体中文版封面
  7. 使用UIWebView中html标签显示富文本
  8. linux优化服务器,Linux服务器优化
  9. 【莓闻】芮成钢专访黑莓CEO巴尔西利
  10. 织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
  11. 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(2)
  12. 人民币对美元汇率中间价报6.7343元 上调13个基点
  13. python实验总结与分析_Python实验报告七
  14. 关于AppInventor之gzjkw.net版本的电脑模拟器用法
  15. 第一篇——胡咧咧之动漫素材如何最有效最快的查找下载,动漫网站有哪些?
  16. XBee SX/XTC/XTend 长距离通信产品
  17. SourceTree安装教程
  18. 一个简单的2048小游戏
  19. CSS图片底部默认边距三种解决办法
  20. 如何利用excel计算百分位

热门文章

  1. 国企招聘 : 中国铁塔招聘800人!八险二金!
  2. config kubectl_kubectl config 命令使用说明
  3. 从入门到实战,Android学习路线大全,程序员翻身之路
  4. 一招去掉电脑广告弹窗推荐界面
  5. 解决如何使用layui导入Excel表数据
  6. 智能安保巡检机器人的实用性分析
  7. Anchorfree Hotspot Shield 去广告方法
  8. Python-Point Cloud 系列(二)——PointNet论文复现
  9. usb为什么计算机无法识别网络,为什么电脑不能识别插入的USB设备_USB无法识别的处理方法 - 驱动管家...
  10. 打开图片显示Windows照片查看器无法显示图片。因为计算机上的可用内存可能不足。解决方法!