我将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)
此方法的参数已被识别为一个值,应始终检查该值以查看它是否为空,但在没有先前的空检查的情况下将其解除引用。
我做错了什么?
答案 0 :(得分:1)
你告诉findbugs foo
和bar
是@Nonnull
。这告诉findbugs查看methodA
的调用是否存在null
参数的可能性,如果找到它们则拒绝这些调用。
在方法中,正是因为它们被@Nonnull
注释,findbugs假设它们不能是null
,因此允许您直接使用它们。
您可能希望使用@CheckForNull
为您期望的行为添加参数。