我在Eclipse中得到的这些“资源泄漏”警告似乎是一个拯救生命的工具。
但是,如何让他们为工厂创建的实例工作呢?
例如(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 {}
};
}是否有一个注释可以放在newResource()上,或者我可以做些什么让编译器(或者是Eclipse?)知道所有权的变化吗?
发布于 2018-03-30 08:05:17
Neon关于“资源泄漏”检测的文档解释了正在发生的事情;请参见“避免资源泄漏”。它指出:
所有权/责任 上述诊断基本上假定创建资源类型实例的方法也负责关闭此资源。然而,一些资源将在几种方法之间共享。在这里,分析提出了以下假设:
第1点解释了为什么在return方法中没有针对newResource语句的“资源泄漏”警告。
第3点解释了为什么newResource()调用没有“资源泄漏”警告。充其量,这将是一个“潜在的资源泄漏”警告。要么禁用了这些警告,要么先前的警告正在阻止它。
问:是否有注释可以告诉Eclipse资源所有权的转移?
答: Neon文档没有提到任何这样的注释。(它确实详细介绍了用于空检查的注释!)
https://stackoverflow.com/questions/23258753
复制相似问题