gpt4 book ai didi

java - Eclipse 4.2 资源通过单独的关闭方法泄漏

转载 作者:搜寻专家 更新时间:2023-11-01 02:51:00 26 4
gpt4 key购买 nike

我正在使用启用了资源泄漏警告的 Eclipse 4.2。

这段代码会产生一个在我看来是错误的资源泄漏警告。

    public static void test(){
InputStream in = null;
try {
in = new FileInputStream("A");
} catch (IOException e) {
return;
}finally{
close(in);
}
}

public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

如果我重构代码,并将 close 方法拉入 finally block ,一切都很好。

    public static void test2(){
InputStream in = null;
try {
in = new FileInputStream("A");
} catch (IOException e) {
return;
}finally{
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace()
}
}
}
}

我能否以某种方式删除这些警告,而不必复制 close 方法的代码,也不必禁用资源泄漏警告?

我发现了一个错误报告 here对于循环中发生的类似情况,但我的代码中不存在循环。

最佳答案

  • 您应该会看到“潜在资源泄漏...”警告,如果没有,请提交错误。
  • 这里的主要问题是编译器不知道“close(..)”方法的作用。它可能会也可能不会关闭资源。 (注意编译器不进行过程间分析)
  • 您可以选择忽略“潜在资源泄漏”警告。 (“资源泄漏”警告保证是正确的,但“潜在...”警告不是)

可以在此处找到有关资源泄漏分析的更多详细信息 - http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-avoiding_resource_leaks.htm&cp=1_3_9_1

编辑:关于“资源泄漏”与“潜在资源泄漏”的一个词

  • 想法是保证所有报告的“资源泄漏”警告都是正确的,但可能不是代码库中的“全部”资源泄漏。
  • “潜在的资源泄漏”是……潜在的问题。一些开发人员在知道出现问题但不知道哪里出了问题时会打开“潜在...”警告。在这种情况下,潜在的警告有助于缩小搜索范围。其他一些开发人员只是不时检查潜在的警告,看看那里是否存在真正的问题。

理想情况下,我们希望编译器为我们提供完整且正确的问题集,但实现这一点存在局限性:-)

关于java - Eclipse 4.2 资源通过单独的关闭方法泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com