ant*_*tak 10 java eclipse autocloseable
我在Eclipse中获得AutoCloseable
的这些"资源泄漏"警告似乎可以节省生命.
但是,如何让它们为工厂创建的实例工作?
例如(a
有效,但b
没有):
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 {}
};
}
Run Code Online (Sandbox Code Playgroud)
是否有我可以坚持的注释newResource()
或我可以做的事情让编译器(或者它是Eclipse?)知道所有权的变化?
Neon Eclipse 关于“资源泄漏”检测的文档解释了发生的情况;请参阅“避免资源泄漏”。它指出:
所有权/责任
上述诊断基本上假设创建资源类型实例的方法也负责关闭该资源。然而,一些资源将在多种方法之间共享。这里分析做出以下假设:
- 如果方法将资源返回给其调用者,则它不负责关闭;没有报告任何问题。
- 如果一个资源存储在一个字段中,则没有任何单个方法被认为负责关闭;没有报告任何问题。
- 如果一个方法通过方法调用而不是通过 new 表达式获取资源,它可能负责也可能不负责;任何问题仅被标记为潜在的资源泄漏。
- 如果资源在方法调用或构造函数调用中作为参数传递,则当前方法可能负责也可能不负责;任何问题仅被标记为潜在的资源泄漏。
return
第 1 点解释了为什么方法中的语句没有“资源泄漏”警告newResource
。
第 3 点解释了为什么调用没有“资源泄漏”警告newResource()
。充其量,这只是一个“潜在资源泄漏”警告。要么您禁用了这些警告,要么之前的警告禁止了它。
问:是否有注释告诉 Eclipse 有关资源所有权转移的信息?
答:Neon Eclipse 文档没有提及任何此类注释。(它确实详细介绍了空检查的注释!)
归档时间: |
|
查看次数: |
1013 次 |
最近记录: |