我有以下代码,据我所知,它不能返回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。我知道这些是撰写本文时的最新版本。
(代码可能看起来有点无意义,这只是一个例子。)