🤷 场景
Java 中使用资源的时候,一般在使用完成后,都会关闭/清理资源。比如 Java 中的 IO 流,使用完成后,必须在 finally 中执行 close 操作。
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(new File("D:" + File.separator + "1.txt"));
int first = fileInputStream.read();
System.out.println(first);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
😎 JDK 1.7 解决方案
使用 try-with-resource 语法糖:
try (FileInputStream fileInputStream = new FileInputStream(new File("D:" + File.separator + "1.txt"))) {
int first = fileInputStream.read();
System.out.println(first);
} catch (IOException e) {
throw new RuntimeException(e);
}
😎 Lombok 解决方案
提供 @Cleanup 注解自动清理资源。
- 默认调用 close() 方法,注意方法没有参数哦
- 支持自定义 关闭/清理 资源的方法,比如 Netty 中使用 dispose 而不是 close,则注解为@Cleanup(“dispose”),即可自动调用 dispose 来清理资源
// Lombok 代码
try {
@Cleanup FileInputStream fileInputStream = new FileInputStream(new File("D:" + File.separator + "1.txt"));
int first = fileInputStream.read();
System.out.println(first);
} catch (IOException e) {
throw new RuntimeException(e);
}
// 反编译得到的代码
try {
FileInputStream fileInputStream = new FileInputStream(new File("D:" + File.separator + "1.txt"));
try {
int first = fileInputStream.read();
System.out.println(first);
} finally {
if (Collections.singletonList(fileInputStream).get(0) != null) {
fileInputStream.close();
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
参考
1.https://projectlombok.org/features/Cleanup
更多文章
1.消除代码冗长神器 - Lombok | 入门-CSDN博客
2.消除代码冗长神器 - Lombok | 安装-CSDN博客
3.消除代码冗长神器 - Lombok | val/var 本地变量声明-CSDN博客
4.消除代码冗长神器 - Lombok | @Setter/@Getter 生成 setter/getter 方法-CSDN博客
5.消除代码冗长神器 - Lombok | @EqualsAndHashCode/@ToString注解详解-CSDN博客
6.消除代码冗长神器 - Lombok | @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 构造方法-CSDN博客
7.消除代码冗长神器 - Lombok | @Data 通用 POJO 注解-CSDN博客
8.消除代码冗长神器 - Lombok | @With 不可变的 setter 方法-CSDN博客
9.消除代码冗长神器 - Lombok | @Value 不可变 entity-CSDN博客
10.消除代码冗长神器 - Lombok | @Cleanup 自动清理资源-CSDN博客
11.消除代码冗长神器 - Lombok | @Log/@Slf4j 创建日志对象-CSDN博客
12.消除代码冗长神器 - Lombok | @Builder注解 - Builder 设计模式快速实现
13.消除代码冗长神器 - Lombok | @NonNull 判空逻辑
14.消除代码冗长神器 - Lombok | @SneakyThrows 检查型异常转抛
15.消除代码冗长神器 - Lombok | @Synchronized 锁
16.消除代码冗长神器 - Lombok | 试验性注解
17.消除代码冗长神器 - Lombok | 进阶用法 - 全局配置 & 去除Lombok
18.消除代码冗长神器 - Lombok | 高阶用法 -> 手写 @Getter 注解