我在java中看到一些方法声明为:

void foo(@Nullable Object obj)
{ ... }

@Nullable在这里是什么意思?这是否意味着输入可以为空?

没有注释,输入仍然可以为空,所以我猜这不是它?


当前回答

它清楚地表明,该方法接受空值,如果重写该方法,也应该接受空值。

它还可以作为FindBugs等代码分析器的提示。例如,如果这样的方法在未首先检查是否为空的情况下解引用其参数,FindBugs将发出警告。

其他回答

不同的工具可能对@Nullable的含义有不同的解释。例如,Checker框架和FindBugs处理@Nullable的方式不同。

当然,肯定有不同的想法,在我的世界里,我不能强制“永不传递null”,因为我正在处理不可控的第三方,如API调用者,数据库记录,前程序员等…所以我在方法上是偏执狂和防御性的。由于您使用的是Java8或更高版本,因此有比if块更简洁的方法。

public String foo(@Nullable String mayBeNothing) {
   return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}

您还可以通过将.orElse转换为 orElseThrow(() -> new Exception(" don ' send a null"))。

如果你不想使用@Nullable,它没有添加任何功能,为什么不直接用mayBe…所以你的意图很明确。

此注释通常用于消除nullpointerexception。@Nullable表示该参数可能为空。谷歌Guice就是一个很好的例子。在这个轻量级依赖注入框架中,您可以看出这个依赖可能是空的。如果你试图在没有注释的情况下传递null,框架将拒绝做它的工作。

此外,@Nullable可以与@ nottnull注释一起使用。在这里你可以找到一些如何正确使用它们的技巧。IntelliJ中的代码检查检查注释并帮助调试代码。

它清楚地表明,该方法接受空值,如果重写该方法,也应该接受空值。

它还可以作为FindBugs等代码分析器的提示。例如,如果这样的方法在未首先检查是否为空的情况下解引用其参数,FindBugs将发出警告。