Zhe*_*lov 9 java try-with-resources
事实证明,几乎没有人正确地关闭Java中的资源.程序员要么不使用try-finally块可言,或只是把resource.close()在finally,这也是不正确的(因为Throwable从close()可影子Throwable从try块).有时他们把类似的东西IOUtils.closeQuietly()只是正确的InputStream,但不是OutputStream.try-with-resources解决了所有这些问题,但仍有大量的项目用Java 6编写.
try-with-resources在Java 6中模拟的最佳方法是什么?现在我使用的是Guava Closer,它比什么都好,但仍然比它更糟糕try-with-resources.此外,还有一种称为贷款模式的模式,但Java中缺少lambdas使得这种模式非常麻烦.有没有更好的办法?
我找到了一个很好的替代品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);
}
Run Code Online (Sandbox Code Playgroud)
但是,它不能正确处理异常。该错误已经存在 1 年多了,但仍未关闭:https://code.google.com/p/projectlombok/issues/detail?id=384
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |