文章目录
Lombok的使用笔记
- Lombok通过修改AST(抽象语法树),在编译器编译时改变字节码生成,可以实现自动写
get()
或set()
方法等,极大地简化了Java的代码。
0. 安装
安装分为两部分:依赖和IDE插件。
- 以IDEA为例,需要在Settings-Plugins中安装lombok插件并重启;
- 然后以maven为例,配置
pom.xml
文件。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
常用的类/注解:
val/var
:动态变量类型;@NoArgsConstructor
,@RequiredArgsConstructor
,@AllArgsConstructor
:自动构造函数;@NonNull
:空值检查;@Cleanup
:自动清除(try-finally机制);@Getter/@Setter
:自动get
、set
方法;@Data/@Value
:自动POJO类 ;@Log
:自动日志 ;
1. val/var
- 直接申请一个局部变量而不用具体写具体声明。二者区别为:前者是final类型的。
import java.util.ArrayList;
import java.util.HashMap;
import lombok.val; // 引入
public class ValExample {
public String example() {
val example = new ArrayList<String>();
example.add("Hello, World!");
val foo = example.get(0);
return foo.toLowerCase();
}
public void example2() {
val map = new HashMap<Integer, String>();
map.put(0, "zero");
map.put(5, "five");
for (val entry : map.entrySet()) {
System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
}
}
}
原生JAVA:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class ValExample {
public String example() {
final ArrayList<String> example = new ArrayList<String>();
example.add("Hello, World!");
final String foo = example.get(0);
return foo.toLowerCase();
}
public void example2() {
final HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(0, "zero");
map.put(5, "five");
for (final Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
}
}
}
2. @NonNull
- 生成空检查语句。
import lombok.NonNull;
public class NonNullExample{
private String name;
public NonNullExample(@NonNull Person person) {
System.out.println(person.getName());
}
}
原生Java:
import lombok.NonNull;
public class NonNullExample extends {
private String name;
public NonNullExample(@NonNull Person person) {
if (person == null) {
throw new NullPointerException("person is marked @NonNull but is null");
}
System.out.println(person.getName());
}
}
3. @Cleanup
- 自动调用
close()
方法(或自定无参析构方法)做资源清理工作。 - 自定无参析构方法如:
@Cleanup("dispose")
,将会调用dispose()
方法。
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);