java - 我应该用哪一个@NotNull注解

原文 标签 IT工具网 java

我希望能通过注解的方式,尽量避免程序中出现空指针问题,同时既能保障代码的可读性,又能和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

相关文章:

java - Java的SimpleDateFormat解析日期不正确

java - 为什么相减这两个时间(1927年)会得到奇怪的结果

为什么Java的Vector类被认为是过时的或者废弃的

java - 通过尝试从 Google-Cloud-Storage 读取值来授予无效授权

java - 在Android中使用JSON将字符串编码为UTF-8

java - 我应该如何处理或不应该进行单元测试?

java - Thread.sleep(x) 是否足够准确以用作 Android 中的时钟?

XCode解决 can't locate file for .a文件异常

短网址的用途及原理

java - 重写(Override)equals和hashCode方法时应考虑的问题