【发布时间】:2013-10-30 02:57:01
【问题描述】:
事实证明,几乎没有人正确关闭 Java 中的资源。程序员要么根本不使用try-finally 块,要么只将resource.close() 放在finally 中,这也是不正确的(因为close() 中的Throwable 可以从try 块中隐藏Throwable)。有时他们会放一些像IOUtils.closeQuietly() 这样的东西,只对InputStream 是正确的,但对OutputStream 是不正确的。 try-with-resources 解决了所有这些问题,但仍有大量项目使用 Java 6 编写。
在 Java 6 中模拟 try-with-resources 的最佳方法是什么?现在我用Guava Closer,总比没有好,但还是比try-with-resources丑多了。此外,还有一种称为贷款模式的模式,但 Java 中缺少 lambda 使得这种模式非常麻烦。有没有更好的办法?
【问题讨论】:
-
使用 Java 7 编译器?
-
Guava Closer 似乎与 Java 6 一样优雅。
-
我无法使用 Java 7 编译器
-
仅供参考,
IOUtils.closeQuietly在较新版本的commons-io中是为Closable接口定义的。所以你可以用它关闭你想要的东西(不仅仅是流)。 commons.apache.org/proper/commons-io/javadocs/api-2.4/org/…