Eclipse不一致:资源泄漏:”永远不会关闭
如果我有以下代码:
public OutputStream test(boolean condition) throws FileNotFoundException { return condition ? null : new FileOutputStream("test.txt"); }
Eclipse将黄色曲线放在new FileOutputStream("test.txt")
并向我显示以下警告:
Resource leak: '' is never closed
奇怪的是,如果我删除三元操作:
public OutputStream test() throws FileNotFoundException { return new FileOutputStream("test.txt"); }
警告消失了。
这是Eclipse中的不一致(错误?)还是我错过了两种情况之间的一些根本区别?
一般来说,似乎Eclipse足够聪明,可以理解当我从方法返回一个Closeable
,可以不让方法关闭流(总之,返回一个封闭流的重点是什么?)。 当我间接返回结果时,它甚至可以正确地执行此操作:
public OutputStream test() throws FileNotFoundException { FileOutputStream result = new FileOutputStream("test.txt"); return result; }
(这里没有警告)
那么,Eclipse是否因为三元操作而感到困惑? 如果是这样,我应该将此报告为错误吗?
另一件奇怪的事:
如果我用ByteArrayOutputStream
替换FileOutputStream
,警告也会消失:
public OutputStream test(boolean condition) { return condition ? null : new ByteArrayOutputStream(); }
为什么它对这两种流的处理方式不同? 两者都是OutputStream
直接后代,并实现完全相同的接口( Closeable
, Flushable
, AutoCloseable
)。 它是否知道ByteArrayOutputStream.close()
是一个无操作? 如果是这样,是硬编码到Eclipse中还是实际解析源代码或字节代码来解决这个问题?