引言

你可以使用@Cleanup注解确保代码执行路径退出当前作用于时清除制定资源。可以使用该注解标记局部变量,如下:

@Cleanup InputStream in = new FileInputStream("some/file");

其结果就是在该作用域的末尾将调用in.close()方法,并使用了try/finally代码块确认该方法一定执行。下面的示例中将展现该注解如何工作。

如果你想要标记一个没有close()方法的对象,但是有另一个没有参数的清除方法,可以像下面的代码中那样指定具体的清除方法名:

@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);

默认情况下清除方法被认定为close()。包含一个或者多个参数的清除方法不能使用@Cleanup来进行调用。

使用Lombok

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);

}

}

}

普通Java代码

import java.io.*;

public class CleanupExample {

public static void main(String[] args) throws IOException {

InputStream in = new FileInputStream(args[0]);

try {

OutputStream out = new FileOutputStream(args[1]);

try {

byte[] b = new byte[10000];

while (true) {

int r = in.read(b);

if (r == -1) break;

out.write(b, 0, r);

}

} finally {

if (out != null) {

out.close();

}

}

} finally {

if (in != null) {

in.close();

}

}

}

}

支持的配置项

lombok.cleanup.flagUsage = [warning | error] (default: not set) 默认不进行设置,配置后Lombok将会把使用@Cleanup的类标记为错误或者警告。

小提示

在finally块中,仅在给定资源不为null时才调用清除方法。 但是,如果在代码上使用delombok,则会插入lombok.Lombok.preventNullAnalysis(Object o)并调用,以防止在静态代码分析可能确定不需要进行空检查时发出警告。 在类路径上使用lombok.jar进行编译会删除该方法调用,因此不存在运行时依赖性。

当作用域中的代码块抛出异常后,清除方法也抛出异常时,原异常将被清除方法抛出的异常所覆盖进而被隐藏。所以不可过度依赖这个特性。如果可以的话,Lombok想要成的代码时当主体代码块抛出异常时,清除方法抛出的异常就被静默吞噬(但是当主体代码以其他方式退出时则不进行吞噬)。Lombok的作者目前不知道该如何实现这个方法,但如果Java后面的更新允许,我们将对此进行修复。

你依旧需要处理清除方法抛出的一切异常。

java中cleanup的使用_【Lombok注解】@Cleanup 自动资源管理:安全无困扰地调用close方法...相关推荐

  1. java中next的用法_关于java iterator的next()方法的用法

    UYOU next()是java迭代器类(Iterator)的方法,获得当前游标指向的下一个元素,详细说明和应用如下:1.迭代器(Iterator)介绍 迭代器是一种设计模式,它是一个对象,它可以遍历 ...

  2. Java黑皮书课后题第7章:7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值。编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字

    7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值.编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字 题目 题目描述与运行示例 破题 代码 21.11.11 ...

  3. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  4. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...

  5. java中静态方法可以被继承_关于java:静态方法中的继承

    为什么下面的代码会打印"MAIN"? public class Main { public static void method() { System.out.println(&q ...

  6. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  7. java中打开文件显示_从java程序中打开任何文件

    在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...

  8. java中各种vo举例_了解JAVA中的POJO,Entity,PO,VO,DTO,DM包括代码举例展示

    标签: 首先是从概念上来说 POJO,全称Plain Ordinary Java Object,我理解为极其单纯的Java对象 一般只有属性字段,无参构造以及get和set方法,也是指那些没有从任何类 ...

  9. java中xml怎样配置_如何通过XML方式配置并实现Mybatis

    idea中创建一个maven项目 在pom文件中导入下面的依赖 org.mybatis mybatis 3.4.6 mysql mysql-connector-java 8.0.18 log4j lo ...

  10. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

最新文章

  1. mysql实现sass_使用sass绘制三角形
  2. EntityFramework SaveChange()方法不能更新的问题
  3. 常见电子元件实物照片
  4. vs2010 unresolved external symbol error
  5. java全面的知识体系结构总结
  6. 网页 html 全图片排版,HTML5-网页排版划分
  7. win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?
  8. 双城生活,一种相对无奈且幸福的选择
  9. ArcGIS实验教程——实验十六:空间数据查询
  10. vc中关于 directx的配置,和dxsdk_extras(directshow)
  11. 在java中jvm目录_JVM具体在哪个文件夹下的
  12. mysql 联合主键_深入理解Mysql索引底层数据结构与算法,背后的故事
  13. 前端基础:学习 ES6 新特性
  14. 计算机编码中进制的区别,计算机中的进制和编码(转载)
  15. flash实用工具类+开源包收藏
  16. 需求分析说明书SRS
  17. [原创]集成了网络/加密解密/大数运算/位运算等功能的dll
  18. 助力低碳出行 | 基于ACM32 MCU的电动滑板车方案
  19. kettle案例21-将字段值设置为常量
  20. 家用 NAS 服务器(1)| 配置选择及准备

热门文章

  1. Swift All-In-One安装指南
  2. 一键刷入twrp_红米Note8Pro最简单一键获取ROOT权限教程-管理自启更省电
  3. 职场必备:十句外企 office 常用英语
  4. C sharp 拉姆达、回调函数、事件
  5. 目前人工智能技术,主要有应用于哪些领域?
  6. 高校三维地图校内导航系统解决方案
  7. SPI 接口OLED 使用5V 信号驱动可能需要电平转换
  8. 学习资料 AND ORR
  9. 中国ERP三大流程 国外ERP黯然失色
  10. windows计算机查看里设置,windows10电脑配置怎么查看