如何更有效地使用@Nullable和@Nonnull注释?

我可以看到这一点,注释可能有助于防止s,但它们不会传播得很远。@Nullable@NonnullNullPointerException

  • 这些注释的有效性在一个间接寻址级别后完全下降,因此,如果只添加几个注释,它们不会传播得很远。
  • 由于这些注释没有得到很好的执行,因此存在假设标记为 not null 的值的危险,因此不会执行 null 检查。@Nonnull

下面的代码会导致标记为 be 的参数不会引起任何投诉。它在运行时会抛出 a。@NonnullnullNullPointerException

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        
    }
}

有没有办法使这些注释更严格地执行和/或进一步传播?


答案 1

简短的回答:我想这些注释只对您的IDE有用,以警告您可能的空指针错误。

正如“清理代码”一书中所说,您应该检查公共方法的参数,并避免检查不变量。

另一个好的提示是永远不要返回空值,而是使用空对象模式


答案 2

除了在将参数传递给期望参数不为 null 的方法时,IDE 会为您提供提示之外,还有其他优点:null

这可以帮助您的代码更易于维护(因为您不需要检查)并且不易出错。null


推荐