多读书多实践,勤思考善领悟

我应该用哪一个@NotNull注解?

本文于1805天之前发表,文中内容可能已经过时。

问题

我希望能通过注解的方式,尽量避免程序中出现空指针问题,同时既能保障代码的可读性,又能和IDE的代码检查,静态代码扫描工具结合起来。相关的注解,我看到有好多种@NotNull/@NonNull/@Nonnull,而他们彼此间又有冲突,不能共用,下面是我找到的一些注解,哪个是最好的选择呢?

1.javax.validation.constraints.NotNull

运行时进验证,不静态分析

2.edu.umd.cs.findbugs.annotations.NonNull

用于finbugs和Sonar静态分析

3.javax.annotation.Nonnull

只适用FindBugs,JSR-305不适用

4.org.jetbrains.annotations.NotNull

适用用于IntelliJ IDEA静态分析

5.lombok.NonNull

适用Lombok项目中代码生成器。不是一个标准的占位符注解.

6.android.support.annotation.NonNull

适用于Android项目的标记注解,位于support-annotations包中

回答


我推荐用javax命名空间下的注解(虽然我喜欢Lombok和Intelij做的事情),使用其他命名空间的注解,等于你还需要引入其他依赖。

我用javax.validation.constraints.NotNull,因为它已经在Java EE 6中定义

javax.annotation.NonNull可能直到java 8都不存在(正如Stephen指出)。其他的都不是标准的注解 .

如果注解是可扩展的,那将是一件美好的事情.你可以自己写一个non-null注解,然后继承上面说的这些注解。如果标准的注解不支持某个特性,你就可以在自己定义的注解里面扩展。

stackoverflow链接: http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use