必须为非null,但仅在使用lambdas时才标记为可为空

时间:2018-04-26 07:59:18

标签: findbugs

我在sonarqube发现了一种奇怪的行为,我不知道它是不是一个bug,或者我只是不太了解lambdas的机制。

在我们的代码库中,我们有一些代码:

 @Nullable
 private Runnable nulltest(@Nullable String myNullableString) {
    if(myNullableString == null) {
        return null;
    }

    return () -> System.out.println("This string is not null: " + myNullableString);
}

这个代码很好,sonarqube没有问题。 但是,如果我将代码改为使用lambdas,那么:

BSTR

然后我收到以下错误: FindBugs的:NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE myNullableString必须为非null,但标记为可为空

所以我不明白为什么它曾经是一个问题而另一个时间不是。这是一个错误还是lambda版本和此方法的匿名类版本之间存在真正的区别?

1 个答案:

答案 0 :(得分:0)

感谢托马斯·詹森,它似乎确实是一个错误,已经报告给了斑点狗

https://github.com/spotbugs/spotbugs/issues/552