@Nullable注释的使用

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

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

这里的@Nullable是什么意思?这是否意味着输入可以是null?

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

301179 次浏览

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

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

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

更重要的是,@Nullable可以与@NotNull注释一起使用。在这里你可以找到一些正确使用它们的技巧。IntelliJ中的代码检查检查注释并帮助调试代码。

不同的工具可能会以不同的方式解释@Nullable的含义。例如,检查程序框架FindBugs处理@Nullable 不同的

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

public String foo(@Nullable String mayBeNothing) {
return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}
你也可以通过将.orElse转换为 orElseThrow(() -> new Exception("Dont' send a null")) . < / p >

如果你不想使用@Nullable,它没有添加任何功能,为什么不直接用mayBe...命名参数,这样你的意图就很明确了。