Lombok基本用法

这里主要抒写下Lombok中许多常用的方法:

首先引入相关依赖

1
2
3
4
5
6
7
8
9
10


<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>


Lombok注解

@Data:注解在类上,将类提供的所有属性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法

@Setter:注解在类上,为所有属性添加set方法、注解在属性上为该属性提供set方法

@Getter:注解在类上,为所有的属性添加get方法、注解在属性上为该属性提供get方法

@NotNull:在参数中使用时,如果调用时传了null值,就会抛出空指针异常

@Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定

@Log作用于类,创建一个log属性

@Builder:使用builder模式创建对象

@NoArgsConstructor:创建一个无参构造函数

@AllArgsConstructor:创建一个全参构造函数

@ToString:创建一个toString方法

@Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。

@RequiredArgsConstructor:创建对象, 例: 在class上添加@RequiredArgsConstructor(staticName = “of”)会创建生成一个静态方法

@UtilityClass:工具类

@ExtensionMethod:设置父类

@FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。

@Cleanup: 关闭流、连接点。

@EqualsAndHashCode:重写equals和hashcode方法。

@toString:创建toString方法。

@Cleanup: 用于流等可以不需要关闭使用流对象.

这里主要说下@Accessors(chain = true),使用链式创建

1.常规的实体赋值如下:

可以明显的看出实例化一个指定的类然后用类名.属性名去复制。

2.现在用注解@Accessors(chain = true),这个注解来修饰类:

可以看出来使用了改注解后可以直接使用类名.属性名直接set数据,而不用每个数据都去使用

这样代码的整洁和布局也会有进一步的提升。

3.顺带说一下清理流对象的注解:

@Cleanup 自动资源管理:没有麻烦和安全地调用您的close()方法。

您可以使用@Cleanup以确保在代码执行路径退出当前作用域之前自动清除给定资源。您可以通过使用@Cleanup注释任何局部变量声明来执行此操作: @Cleanup InputStream in = new FileInputStream("xx/file");

结果,在您作用域范围的末尾调用in.close()。保证通过try / finally构造运行此调用。

如果要清理的对象类型没有close()方法,但是有其他一些无参数方法,则可以指定此方法的名称,如下所示: @Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0); 默认情况下,清除方法被假定为close()@Cleanup无法调用带有1个或多个参数的清理方法。

1.使用@Cleanup注解 :

2.常规的处理方法:

单单从代码的行数上面就可以知道已经精简了不少,同时,代码的可读性也进一步提高。从代码中我们可以容易的看出,@Cleanup的作用就是在当前变量不在有效范围内的时候,对其进行自动的资源回收。在Java中的Stream上使用Cleanup Annotation,就是对其调用close方法

Cleanup 存在一个小问题:

官网给出了提示,如果你的代码中出现了异常,那么会触发cleanup方法抛出异常,导致把原始异常吞掉,这样就导致你在上层不知道发生了什么事情,但是如果说你是在调用close方法的时候出了异常,那么Cleanup这个annotation是不会把异常吞掉的。

https://objectcomputing.com/resources/publications/sett/january-2010-reducing-boilerplate-code-with-project-lombok