未按预期触发Findbugs NP_ARGUMENT_MIGHT_BE_NULL

时间:2016-05-21 00:24:10

标签: java findbugs

我将Findbugs与注释javax.annotation.Nonnull一起使用。在以下方法

@Nonnull
public String methodA(@Nonnull String foo, @Nonnull Integer bar) {
    // missing checkNotNull(foo)
    // missing checkNotNull(bar)

    int fooLen = foo.length();    // did not check that foo is non-null

    return (bar < fooLen)? foo : null; // did not check that bar is non-null
}

params foo和bar被声明为非null,并且它们随后被解除引用而不首先被检查它们是否为null。 当我针对代码运行Findbugs时(使用Gradle Findbugs插件),Findbugs报告不包含预期的警告NP_ARGUMENT_MIGHT_BE_NULL。在Findbugs网站上,NP_ARGUMENT_MIGHT_BE_NULL的描述:

  

NP:方法不检查空参数(NP_ARGUMENT_MIGHT_BE_NULL)

     

此方法的参数已被识别为一个值,应始终检查该值以查看它是否为空,但在没有先前的空检查的情况下将其解除引用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你告诉findbugs foobar@Nonnull。这告诉findbugs查看methodA的调用是否存在null参数的可能性,如果找到它们则拒绝这些调用。

在方法中,正是因为它们被@Nonnull注释,findbugs假设它们不能是null,因此允许您直接使用它们。

您可能希望使用@CheckForNull为您期望的行为添加参数。