@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