ale*_*2k8 9 java static-analysis findbugs
当我在此代码上运行FindBugs时,它报告没有问题.
boolean _closed = false;
public void m1(@Nullable String text) {
if(_closed)
return;
System.out.println(text.toLowerCase());
}
Run Code Online (Sandbox Code Playgroud)
虽然在这里找到了预期的问题:
public void m1(@Nullable String text) {
System.out.println(text.toLowerCase()); // FindBugs: text must be nonnull but is marked as nullable
}
Run Code Online (Sandbox Code Playgroud)
为什么在第一种情况下会失败?
@Nullable 仅适用于那些您希望允许为空的参数、方法或字段。
似乎您允许文本变量为空值。您可能应该改用@NonNull。
编辑
我自己尝试了一下,得到了同样的结果。
findbugs 错误(来自确实给出空指针错误的第二种方法)报告中的文本显示:
此参数的使用方式始终要求其为非空,但该参数被显式注释为可为 Nullable。要么是参数的使用错误,要么是注释错误。
我的猜测是,由于它不是最终参数,FindBugs 不能/不会对 _close 的值做出任何假设,因为您可以稍后更改它。我什至尝试将 _close variabel 方法限制在 m1 方法内,但它仍然没有将其报告为错误。