lombok使用心得

  • Post author:
  • Post category:其他




1.前言


在效率至上的今天,开发的速度越来越受到程序员的关注,lombok在这一时代横空出世


正如官网上所言

在这里插入图片描述

它是一个java字典,能够帮助你的代码编辑构建工具自动的构建代码,为你的java代码增彩填色,从此再也不用写getter或者equals方法。只需要一个注解就能让你的类拥有全部的构建特性。让你的日志变量也能自动化,还有更多的功能等待你的探索。

官网下载地址

https://www.projectlombok.org/download



更新记录:

2020-10-23 添加

superbuilder介绍



2.注解功能介绍

在这门面向对象的语言里,我们最常做的事就是和对象打交道,这时候在实体类增加一个



@Data

就能代替 getter,setter以及tostring,equals,hashcode

在这里插入图片描述

你的实体类会有如此清奇的画风

所有的

getter,setter以及tostring,equals,hashcode

代码都会伴你自动生成,而且这是在编译阶段进行的。完全不影响你拿一个class去执行。如果项目编译时提示警告


Warning:(16, 1) java: Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add ‘@EqualsAndHashCode(callSuper=false)’ to your type.


你也可以添加这样的一个注解去掉equals和hashcode方法的继承



@EqualsAndHashCode(callSuper = false)

在这里插入图片描述

这时有一个问题就不得不说了,如果你的实体类没有继承父类则可以写false。

如果继承了父类,需要加上@EqualsAndHashCode(callSuper = true),这里设置为true是有原因的,当使用@Data注解时,则有了@EqualsAndHashCode注解,那么就会在此类中存在equals(Object other) 和 hashCode()方法,且不会使用父类的属性,这就导致了可能的问题。


比如,有多个类有相同的部分属性,把它们定义到父类中,恰好id(数据库主键)也在父类中,那么就会存在部分对象在比较时,它们并不相等,却因为lombok自动生成的equals(Object other) 和 hashCode()方法判定为相等,从而导致出错。


如果没有继承父类,添加了@EqualsAndHashCode(callSuper = true)会报这个异常(没有继承父类当然不需要加这个东西)


Error:(15, 1) java: Generating equals/hashCode with a supercall to java.lang.Object is pointless.

大概各位也看到了上图中的@Builder

emmm,这个注解才真正是人性化



@Builder

链式构造对象

在这里插入图片描述

在这里插入图片描述

如果你在实体类中默认定义了初值。比如

在这里插入图片描述

这时编译会报一个警告,


Warning:(35, 21) java: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final.


就是说使用@Builder后,用链式构造对象时不会默认赋初值,需要你加这么一个注解才能默认设初值
在这里插入图片描述

emm,这时候有人会想了,有时候我要做一个线程类

在这里插入图片描述

emmm,我要用构造方法给线程的成员变量传值,ok,构造方法你也可以用注解代替



@AllArgsConstructor

有参构造方法

在这里插入图片描述

哦有参构造有了,那么我想调用方法本身,还需要一个无参构造,当然,也是一个注解的事儿。



@NoArgsConstructor

无参构造方法

在这里插入图片描述

嗯,感觉已经很爽了。

但是还有一个骚操作要悄悄告诉你,java是不允许线程抛出异常的。不信?写一个线程类试试!哪个异常你都得抓一抓,好好try catch 吧。但是,lombok可以让你有骚操作



@SneakyThrows

隐式抛出异常

在这里插入图片描述

虽然new Exception对性能什么的都没有好处,但是!!线程里也可以抛出Excrption 。

oh my god ,oracle因言语过激退出了群聊。

oh,还记得官网提到的自动化构造日志变量吗

就是它了



@Slf4j

日志变量

只要类上注解了这个注释

在这里插入图片描述

在下边你就可以开心的log.info了

在这里插入图片描述

当然

log.error();
        log.warn();

也是不会少的

这个功能需要在你的IDE里安装lombok插件,如果不安装的话虽然编译运行都不会出错,但在IDE的编辑页里会报错。

IDE:“咱也不知道log哪里来的,咱也不敢问”。

如果你是处女座,洁癖十分之重。觉得spring的自动注入注解看起来不太顺眼,OK,lombok也能帮你,



@RequiredArgsConstructor(onConstructor = @__(@Autowired))

自动注入

在这里插入图片描述

有了这个注解后,

在这里插入图片描述

注入就写成了常量,lombok会自动写构造器,实现spring的构造器注入。



@Cleanup

让你告别烦人的try,catch,再在finally块中关闭资源

只需要在新建I/O操作对象时对其注解@Cleanup即可,相当于使用jdk7中已实现的Closeable接口的功能

在这里插入图片描述



@Synchronized

同步锁(方法锁或对象锁)这个注解和直接写同步关键字效果效率相同。

在这里插入图片描述



@NonNull

参数内容不为空,相当于加上了非空校验

在这里插入图片描述



版权声明:本文为w4187402原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。