我不确定是否应该这样做,但是FindBug无法检测到以下错误:
public @Nullable String getNull() {
return null;
}
public @Nonnull String getNotNull() {
return getNull();
}
public void doSomething() {
getNull().length();
}
它仅检测到:
public @Nonnull String getNotNull() {
return null;
}
但是这种情况并没有帮助检查@Nonnull
返回方法合同...
我使用:
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
和Gradle:
apply plugin: 'findbugs'
答案 0 :(得分:1)
Section 3.7.2 of the Checker Reference Manual解释了这种(不良的)行为:
3.7.2 关于FindBugs @Nullable的不兼容说明
FindBugs具有@Nullable的非标准定义。 FindBugs的 没有在自己的Javadoc中记录该处理;它不同于 其他用于无效性分析的工具中@Nullable的定义; 应用于正式形式时,其含义与@NonNull相同 参数;这总是使程序员感到惊讶。因此,FindBugs的 @Nullable是有害的,而不是有用的文档。在 实践中,最好的选择是不要依赖FindBugs的无效性 分析,即使您发现FindBugs对其他目的也有用...
FindBugs在使用@Nullable变量时禁止显示所有警告。 (您 必须使用@CheckForNull指示可为空的变量 FindBugs应该检查。)...
// declare getObject() to possibly return null
@Nullable Object getObject() { ... }
void myMethod() {
@Nullable Object o = getObject();
// FindBugs issues no warning about calling toString on a possibly-null reference!
o.toString();
}
...使用FindBugs注释一个声明,该声明禁止检查 所有客户使用的地方,甚至包括您要检查的地方。