当前位置: 首页 > 知识库问答 >
问题:

Eclipse不一致性:资源泄漏:“”从未关闭

刘兴朝
2023-03-14

如果我有以下代码:

public OutputStream test(boolean condition) throws FileNotFoundException {
    return condition ? null : new FileOutputStream("test.txt");
}

Eclipse在new FileOutputStream(“test.txt”)下设置黄色的斜线,并向我显示以下警告:

资源泄漏:“ ”从不关闭

奇怪的是,如果我去掉三元运算:

public OutputStream test() throws FileNotFoundException {
    return new FileOutputStream("test.txt");
}

警告就会消失。

这是不一致(bug?)在Eclipse中,还是我忽略了这两种场景之间的一些基本区别?

通常,Eclipse似乎很聪明,能够理解当我从一个方法返回closeable时,不让该方法关闭流是可以的(毕竟,返回一个关闭的流有什么意义?)。当我间接返回结果时,它甚至正确地做到了这一点:

public OutputStream test() throws FileNotFoundException {
    FileOutputStream result = new FileOutputStream("test.txt");
    return result;
}

(此处无警告)

那么,Eclipse只是被三元运算搞糊涂了吗?如果是的话,我应该将此报告为bug吗?

另一件奇怪的事:

如果将FileOutputStream替换为ByteArrayOutputStream,则警告也会消失:

public OutputStream test(boolean condition) {
    return condition ? null : new ByteArrayOutputStream();
}

为什么要区别对待这两条溪流?两者都是outputstream的直接后代,并实现完全相同的接口(closeableflushableautocloseable)。它知道ByteArrayOutputStream.Close()是no-op吗?如果是这样,是硬编码到Eclipse中,还是它真的解析源码或字节码来解决这个问题?

共有1个答案

慕震博
2023-03-14

这显然是一个窃听器。错误报告https://bugs.eclipse.org/bugs/show_bug.cgi?id=434065已被确认,但尚未修复。

截至2019年7月,该bug仍处于开放状态。

 类似资料:
  • 为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?

  • 此代码导致资源泄漏: conin从未关闭 为什么会发生这种情况?我如何修复它?

  • 我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用

  • 当我创建扫描仪时,似乎出现了这个错误。我试图通过搜索错误名称来解决这个问题,但到目前为止未能成功地让消息停止出现。 代码: 我得到错误的部分:

  • 问题内容: 在spring MVC应用程序中,我使用以下方法在服务类之一中初始化变量: UserLibrary是我在应用程序中使用的第三方工具。上面的代码为’context’变量生成警告。该警告如下所示: 我不明白警告。由于该应用程序是Spring MVC应用程序,因此在运行该应用程序时,我无法真正关闭/销毁上下文,因为我引用该服务。警告到底想告诉我什么? 问题答案: 由于应用程序上下文是一个(i

  • Eclipse Java警告:资源泄漏:“Unassigned Closeable Value”从不关闭 漏在哪里?