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

新手上路,请多包涵

我可以看到 @Nullable@Nonnull 注释 可能 有助于防止 NullPointerException s 但它们不会传播很远

  • 这些注释的有效性在一层间接之后完全下降,所以如果你只添加一些它们不会传播很远。
  • 由于这些注释没有得到很好的执行,因此存在假设标有 @Nonnull 的值不为空并因此不执行空检查的危险。

下面的代码导致标有 @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
    }
}

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

原文由 Mike Rylander 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 971
1 个回答

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

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

另一个好的技巧是从不返回空值,而是使用 空对象模式

原文由 Pedro Boechat 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题