@Nullable注释用法
我在java中看到一些方法声明为:
void foo(@Nullable Object obj) { ... }
@Nullable
的含义是@Nullable
? 这是否意味着input可能为null
? 没有注释,input仍然可以为空,所以我猜这不仅仅是它?
谢谢
它明确表示该方法接受空值,如果重写该方法,则还应该接受空值。
它也可以作为FindBugs之类的代码分析器的一个提示。 例如,如果这样一个方法解引用它的参数而不先检查null,FindBugs将发出一个警告。
此注释通常用于消除NullPointerExceptions
。 @Nullable
经常说这个参数可能是null
。 在Google Guice中可以find这种行为的好例子。 在这个轻量级的dependency injection框架中,你告诉这个依赖关系可能是null
。 如果你试图传递null
而没有注释,框架将拒绝执行它的工作。
还有更多@Nullable
可能与@NotNull
注解一起使用。 在这里你可以find一些如何正确使用它们的技巧。 IntelliJ中的代码检查检查注释并帮助debugging代码。
不同的工具可能会以不同的方式解释@Nullable
的含义。 例如, Checker框架和FindBugs处理@Nullable
不同 。
用@Nullable
声明空值的元素对于返回(对于方法),传递给(对于参数)和保持(对于局部variables和字段)是完全有效的。
用@NotNull
注解的元素声明空值是禁止返回(对于方法),传递给(对于参数)和保持(对于局部variables和字段)。
当覆盖/实现具有注释声明或参数的方法时, @Nullable
和@NotNull
之间存在协变 – @Nullable
关系。
用注解声明覆盖/实现方法:
- 父方法的
@NotNull
注释需要
子类方法的@NotNull
注释。 - 在父方法中使用
@Nullable
注释的方法在子类方法中可以具有@Nullable
或@NotNull
注释。
用注释参数覆盖/实现方法:
- 父方法中参数的
@Nullable
注释需要子类方法参数的@Nullable
注释。 - 在父方法中使用
@NotNull
注释参数的方法对于子类方法参数可以具有@Nullable
或@NotNull
注释(或者它们都不是)。
例:
@Nullable public static UserContext getThreadUserContext() { TransactionParms tp = TransactionParms.getBoundParms(); return (tp == null) ? null : tp.getUserContext(); }
这里getThreadUserContext
方法必须返回一个TransactionParms
的实例。 那个实例可能是Null