![657a5bfd6d06dd1b39396e0f58e777f8.png](https://img-blog.csdnimg.cn/img_convert/657a5bfd6d06dd1b39396e0f58e777f8.png)
这个小工具,想必大家很多人都使用过,就是Lombok,很多人用她来自动生成get和set代码,却很少用它来生成建造者模式,简单介绍一下
安装idea插件
![935f9c6b394f34b9d3eb9aabe5a5a988.png](https://img-blog.csdnimg.cn/img_convert/935f9c6b394f34b9d3eb9aabe5a5a988.png)
pom文件中加入依赖
org.projectlombok lombok 1.16.20provided
使用
很多项目中有很多set代码,如下
studet.setName()student.setAge()student.setGrade()
当set方法很少时,这种方法尚且可以接受,当需要set一堆属性时,你会发现代码都是满屏的set代码,很丑。几乎很有的开源项目都会用建造者模式来生成set代码,演示一下使用
没有继承的情况
![0e1dc2121911dd35cd3d8d8ffc74eb17.png](https://img-blog.csdnimg.cn/img_convert/0e1dc2121911dd35cd3d8d8ffc74eb17.png)
没有用set代码照样设置属性,而且是链式编程,用起来非常爽
有继承的情况
- 对于父类,使用@AllArgsConstructor注解
- 对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解
![e069f865874e8e7f49a292d9ab80d8db.png](https://img-blog.csdnimg.cn/img_convert/e069f865874e8e7f49a292d9ab80d8db.png)
![f60473b76bf1f42697deaa0f5739fccd.png](https://img-blog.csdnimg.cn/img_convert/f60473b76bf1f42697deaa0f5739fccd.png)
极大的缩短行数。简单介绍一下其他注解的使用,应该用的人比较多,就不写详细的代码了
其他注解
@NonNull
参数不能为空,不然会空指针异常
@Data(常用)
=@ToString+@EqualsAndHashCode+@Getter+@Setter
@NoArgsConstructor(常用)/@RequiredArgsConstructor(常用)/@AllArgsConstructor(常用)
无参构造、必填参数构造(@NonNull)、全参构造;生成构造函数功能较弱,有些时候需要自己写一些参数的构造函数,构造函数使用注释和自己写一些参数构造一起使用,有时候会启动不了。这个问题还没有找到原因。
@Getter/@Setter/@Getter(lazy=true)
自动创建get、set;lazy要使用此特性,请创建一个私有的final变量,用运行开销较大的表达式初始化它,并使用@Getter(lazy=true)注释字段。该字段将对代码的其余部分隐藏,并且在首次调用getter时,表达式的计算不会超过一次。
@ToString/@EqualsAndHashCode
自动创建tostring、equals、hashcode方法
@ToString(callSuper = true) 输出父类属性
@Log
直接在代码中使用log.info()之类的,log对象自动帮你创建好
@Cleanup:自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流
@Synchronized:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock或$LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误