@Nullable和@NotNull注释的使用
本节介绍在 IntelliJ IDEA 中引入的 @Nullable 和 @NotNull 注释,IntelliJ IDEA 引用这两个注释来通过恒定条件和异常来捕获 NullPointerException(NPE)以及@Nullable 问题检查。
这些注释旨在帮助您在整个方法层次结构中查看合同,以避免出现 NPE。此外,IntelliJ IDEA 为他们提供了另一个好处:代码检查机制通知您这些合同在注释方法的地方的差异,并在某些情况下提供自动化解决方案。
两个注释 - @Nullable 和 @NotNull - 处理方法调用和字段取消引用外部方法。
IntelliJ IDEA @Nullable 注释
@Nullable 注释提醒您必须在以下情况下引入 NPE 检查:
- 调用可以返回 null 的方法。
- 取消引用可以为 null 的变量 (字段、局部变量和参数)。
IntelliJ IDEA @NotNull 注释
实际上,@NotNull 注释是明确的声明了以下内容的协定:
- 一个方法不应该返回 null。
- 变量(如字段、局部变量和参数)不能保留 null 值。
是否如果违反了这些协定,IntelliJ IDEA 将警告您。
@Nullable 和 @NotNull 注释正式的语义
用 @Nullable 声明注释的元素 null 值对于返回 (方法)、传递给 (参数) 和保持 (对于局部变量和字段) 是完全有效的。
用 @NotNull 声明注释的元素不允许返回 null 值 (对于方法),传递给(对于参数)和保持(对于局部变量和字段)。
当使用带注释的声明或参数来重写/实现方法时,@Nullable 和 @NotNull 之间存在一个协方差-逆变关系。
- 使用注释声明重写/实现方法:父方法的 @NotNull 注释需要针对子类方法的 @NotNull 注释。使用父方法中的 @Nullable 注释的方法在子类方法中可以具有@Nullable 或 @NotNull 注释。
- 使用带注释参数的重写/实现方法:父方法中的参数 @Nullable 注释需要针对子类方法参数的 @Nullable 注释。父方法中参数的 @NotNull 注释的方法对于子类方法参数可以具有 @Nullable 或 @NotNull 注释(或不包含它们)。
怎么生成@Nullable和NotNull?
在Android Studio中已经帮我们导入了相关的注释包,只要点击Android studio中的Infer Nullity变可以生成相应的注释。