Java库lombok及注解如何使用
导读:本文共7964.5字符,通常情况下阅读需要27分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: Lombok是什么Lombok是一个旨在减少代码开发工作的Java库。它提供了一些简单的注解,并以此来消除java中臃肿的模版代码,比如 pojo 中最常见的setter/getter方法, 比如toString方法, 比如equals方法等等,还可以帮助我们关闭流,即使 JDK7 中已经有了 TWR 特性,但这个包很值得一试。通过几个简单的注解,将模版代码在编... ...
目录
(为您整理了一些要点),点击可以直达。Lombok是一个旨在减少代码开发工作的Java库。它提供了一些简单的注解,并以此来消除java中臃肿的模版代码,比如 pojo 中最常见的setter/getter
方法, 比如toString
方法, 比如equals
方法等等,还可以帮助我们关闭流,即使 JDK7 中已经有了 TWR 特性,但这个包很值得一试。
通过几个简单的注解,将模版代码在编译时写入程序。使用 eclipse 可以在 Outline 窗口看到生成的方法,但是在源码里是干净的.
首先去lombok 官网下载jar 包。
只是把 jar 包下载下来并导入工程中,会发现 IDE 不识别它的注解,那怎么办?
将lombok.jar
复制到eclipse.ini
所在的目录下,然后编辑eclipse.ini
文件, 在它的末尾插入以下两行并保存:
接着重启 eclipse 就可以愉快地使用这个库了。
在 IntelliJ 的插件中心可以找到它。
Lombok 提供的注解不多,但都好用,简要说一下常用的几个。
这两个注解修饰成员变量,可用于生成setter/gettter
模版代码。
举个栗子:
将字节码文件反编译后可以看到下面这段代码
编译后
我们发现,对于数组,在写toString
方法时使用了Arrays
类的 静态方法deepToString
。
来看 eclipse 自动生成的toString
方法:
eclipse 中对于数组采用的是Arrays.toString()
。
区别:这两个方法的区别是这样的,对于多维数组,使用toString
只能打印出内部数组的名字,这时需要使用deepToString
方法,它能将内部数组的内容全部打印出来。
可以指定哪些属性不出现在toString
方法中, 比如exclude={"id", "name"}
当类中有成员变量的getter
方法时,生成toString
方法会使用这些getter
方法,比如
但是将该参数设置为true
时(默认为 false),生成toString
方法时就不会使用getter
方法,而是直接使用这些成员变量,比如
原本是以fieldName = fieldValue
的格式来生成toString
方法的,但是将该参数设置为false
后(默认是 true),就不会显示fieldName
了,而只是生成fieldValue
, 比如
若类 A 是类 B 的子类,那么在 A 类重写toString
时,若把该参数设置为true
,会加入下面这段代码,即也会把父类 B 的toString
也写入。
检查传入对象是否为 Null,若为null,则抛出NullPointerException
异常。
举个栗子
编译后代码
用在类上,用于生成equals
和hashcode
方法。
举个栗子
编译后代码
可以看出transient
修饰的变量,不会参与。
参数of
用来指定参与的变量,其他的跟@ToString
注解类似。
该注解用于修饰类,会自动生成getter/setter
方法, 以及重写equals()
,hashcode()
和toString()
方法。
该注解可以用来自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源, 自动生成try­finally
这样的代码来关闭流。
举个栗子:
这三个注解修饰在类上。
@NoArgsConstructor
用于生成一个无参构造方法。
@RequiredArgsConstructor
会生成一个包含了被@NotNull
标识的变量的构造方法。同样可以设置生成构造方法的权限,使用access
参数进行设置。
@AllArgsConstructor
会生成一个包含所有变量, 同时如果变量使用了@NotNull
,会进行是否为空的校验。
举个栗子:
这与下面这段代码是等价的,
该注解用于修饰类,是@Data
的不可变形式, 相当于为成员变量添加final
声明, 只提供getter
方法, 而不提供setter
方法,然后还有equals/hashCode/toString
方法,以及一个包含所有参数的构造方法。
用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式调用
举个栗子:
反编译代码如下:
注意:
使用@Singular
注解的集合属性名必须使用s结尾,lombok
会将属性名结尾的s去掉,剩余的名字会作为方法名, 向这个集合中添加元素。
@Builder
的参数builderClassName
设置生成的builder方法名,
buildMethodName设置
build方法名,
builderMethodName设置
builderMethod`方法名。
比如
自动抛受检异常, 而无需显式在方法上使用throws语句。
用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性 LOCK,而java中的synchronized
关键字锁对象是this
,锁在this
或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误。
举个栗子:
反编译代码如下:
可以替代经典的Double Check Lock样板代码。
举个栗子:
反编译代码如下,
根据不同的注解生成不同类型的log对象, 但是实例名称都是log, 有六种可选实现类
举个栗子,
这条语句会翻译成这样
Java库lombok及注解如何使用的详细内容,希望对您有所帮助,信息来源于网络。