我可以看到@Nullable和@Nonnull注释可能有助于防止NullPointerExceptions,但他们不传播非常远。
>这些注释的有效性在一个水平的间接之后完全下降,因此如果你只添加一些,它们不传播得很远。
>由于这些注释没有得到很好的执行,因此存在假设标记为@Nonnull的值不为null并因此不执行空值检查的危险。
下面的代码使带有@Nonnull标记的参数为null,不会引起任何投诉。它运行时抛出NullPointerException。
public class Clazz {
public static void main(String[] args){
Clazz clazz = new Clazz();
// this line raises a complaint with the IDE (IntelliJ 11)
clazz.directPathToA(null);
// this line does not
clazz.indirectPathToA(null);
}
public void indirectPathToA(Integer y){
directPathToA(y);
}
public void directPathToA(@Nonnull Integer x){
x.toString(); // do stuff to x
}
}
有没有办法使这些注释更严格地执行和/或进一步传播?