Java库lombok及注解如何使用(java,lombok,开发技术)

时间:2024-04-29 21:46:58 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Java%E5%BA%93lombok%E5%8F%8A%E6%B3%A8%E8%A7%A3%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

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异常。
举个栗子

编译后代码

用在类上,用于生成equalshashcode方法。
举个栗子

编译后代码

可以看出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及注解如何使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:php如何判断两数组是否有交集下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18