首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂创建实例的AutoCloseable“资源泄漏”警告?

工厂创建实例的AutoCloseable“资源泄漏”警告?
EN

Stack Overflow用户
提问于 2014-04-24 02:31:25
回答 1查看 1.6K关注 0票数 13

我在Eclipse中得到的这些“资源泄漏”警告似乎是一个拯救生命的工具。

但是,如何让他们为工厂创建的实例工作呢?

例如(a工作,但b不工作):

代码语言:javascript
复制
public static void main(String[] args) {
    // a) This emits a warning
    new AutoCloseable() {
        @Override
        public void close() throws Exception {}
    };

    // b) But this doesn't!
    newResource();
}

public static AutoCloseable newResource() {
    return new AutoCloseable() {
        @Override
        public void close() throws Exception {}
    };
}

是否有一个注释可以放在newResource()上,或者我可以做些什么让编译器(或者是Eclipse?)知道所有权的变化吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-30 08:05:17

Neon关于“资源泄漏”检测的文档解释了正在发生的事情;请参见“避免资源泄漏”。它指出:

所有权/责任 上述诊断基本上假定创建资源类型实例的方法也负责关闭此资源。然而,一些资源将在几种方法之间共享。在这里,分析提出了以下假设:

  1. 如果方法将资源返回给其调用方,则它不负责关闭;没有报告任何问题。
  2. 如果资源存储在字段中,则不认为单个方法负责关闭;没有报告问题。
  3. 如果方法通过方法调用而不是通过新表达式获得资源,那么它可能负责,也可能不负责;任何问题只会被标记为潜在的资源泄漏。
  4. 如果在方法调用或构造函数调用中将资源作为参数传递,则当前方法可能负责,也可能不负责;任何问题只会被标记为潜在的资源泄漏。

第1点解释了为什么在return方法中没有针对newResource语句的“资源泄漏”警告。

第3点解释了为什么newResource()调用没有“资源泄漏”警告。充其量,这将是一个“潜在的资源泄漏”警告。要么禁用了这些警告,要么先前的警告正在阻止它。

问:是否有注释可以告诉Eclipse资源所有权的转移?

答: Neon文档没有提到任何这样的注释。(它确实详细介绍了用于空检查的注释!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23258753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档