事实证明,几乎没有人能正确关闭 Java 中的资源。程序员要么不使用try-finally
完全阻止,或者只是放resource.close()
in finally
这也是不正确的(因为Throwable
from close()
可以阴影Throwable
来自 try 块)。有时他们会放一些类似的东西IOUtils.closeQuietly()
with 仅适用于InputStream
,但不适合OutputStream
. try-with-resources
解决了所有这些问题,但仍然有大量的项目是用 Java 6 编写的。
最好的模仿方法是什么try-with-resources
在 Java 6 中?现在我用番石榴更近,这比什么都没有好,但仍然丑陋得多try-with-resources
。另外,还有一种称为贷款模式的模式,但 Java 中缺少 lambda 表达式使得这种模式非常麻烦。有没有更好的办法?
我找到了一个很好的替代品try-with-resources
。它用Lombok带注释处理的库:
@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);
}
但是,它不能正确处理异常。这个 bug 已经存在 1 年多了,仍然没有关闭:https://code.google.com/p/projectlombok/issues/detail?id=384
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)