为什么Eclipse没有显示流的泄漏警告?

时间:2017-03-21 18:32:26

标签: java eclipse java-stream

在Eclipse Neon中,如果我编写这个Java代码:

Stream<Object> stream = Stream.builder().build();

我没有泄漏警告,但是如果我实施Stream,例如

public class MyStream<T> implements Stream<T> {
    // implementation
}

我写了类似的代码

Stream<Object> stream = new MyStream<>();

我收到Resource leak: 'stream' is never closed警告。这只发生在Eclipse中,而使用javac进行编译时不会发出任何警告。

注意我不是在寻找关于如何关闭流等的答案,而是寻找解释同一界面出现这种不同行为的原因的答案。

2 个答案:

答案 0 :(得分:4)

Eclipse有一个不需要清理的类型的白名单,因为它们实际上并不是指系统资源。此处列出了核心Java类型,但您的自定义类型不是。有关详细信息,请参阅the help

答案 1 :(得分:3)

在第一种情况下,您不是在创建资源实例。在第二种情况下,你是。

eclipse documentation states the following

  

所有权/责任
  以上诊断基本上假设   创建资源类型实例的方法也是   负责关闭此资源。 [...]
    - 如果方法通过方法调用而不是通过新表达式获取资源,则它可能负责也可能不负责;任何问题都是   仅被标记为潜在的资源泄漏。