本节介绍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值。
如果违反了这些协定,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即可生成相应的注释。