为什么FindBugs抱怨.collect(toSet())可能会返回null?

时间:2017-07-05 08:35:45

标签: java java-8 java-stream findbugs

我有以下代码,据我所知,它不能返回null:

import javax.annotation.Nonnull;

public static @Nonnull Set<String> foo() {
    return Arrays.asList("a","b","c").stream().collect(Collectors.toSet()); // line 166
}

但FindBugs抱怨NP_NONNULL_RETURN_VIOLATION错误。

[INFO] MyClass.foo() may return null, 
   but is declared @Nonnull [MyClass, MyClass]
   Returned at MyClass.java:[line 166]
   Known null at MyClass.java:[line 166]
   NP_NONNULL_RETURN_VIOLATION

我已经检查了文档“collect”和“toSet”,他们没有提到有关空值的任何内容,也没有提到它们,也没有提到它们。但我无法想象一种返回null的情况。

我在想,也许FindBugs不了解Java 8流的功能。但FindBugs似乎也不了解Java 8的功能(例如@Nonnull注释本身。)

我正在使用FindBugs Maven插件版本3.0.4,我的源代码依赖于Maven中的FindBugs 3.0.1。我知道这些是撰写本文时的最新版本。

(代码可能看起来有点无意义,这只是一个例子。)

0 个答案:

没有答案