如何解决java资源泄露_Java-Eclipse不一致:资源泄漏:”永不关闭

  • Post author:
  • Post category:java


如果我有以下代码:

public OutputStream test(boolean condition) throws FileNotFoundException {

return condition ? null : new FileOutputStream(“test.txt”);

}

Eclipse在新的FileOutputStream(“ test.txt”)下放置了黄色花体,并向我显示以下警告:

资源泄漏:“”永远不会关闭

奇怪的是,如果我删除三元操作:

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是否只是对三元操作感到困惑?如果是这样,我是否应该将此报告为错误?

另一个奇怪的事情是:

public OutputStream test(boolean condition) {

return condition ? null : new ByteArrayOutputStream();

}

如何区别对待这两个流?两者都是OutputStream的直接后代,并且实现了完全相同的接口(Closeable、Flushable、AutoCloseable).是否以某种方式知道ByteArrayOutputStream.close()是无人值守?如果是这样,是将其硬编码到Eclipse中,还是它实际上是解析源代码或字节码来解决这个问题?



版权声明:本文为weixin_34335039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。