问题:@Nullable 注解的用法
我看到java中的一些方法声明为:
void foo(@Nullable Object obj){…}
在这里@Nullable是什么意思?这是不是意味着输入可以为空?
没有这个注解,输入仍然可以是null,所以我猜这不是它的用法?
回答一
它清楚地说明了这个方法接受空值,而且如果你重写该方法,你也应该接受空值。
它也可以作为像FindBugs这样的代码分析器的提示。例如,如果这样一个方法不首先检查空值就间接引用它的参数,FindBugs就会发出警告。
回答二
这个注解通常用于消除空指针异常。@Nullable表明该参数可能为null。一个很好使用例子就是谷歌Guice。在这个轻量级依赖注入框架中,你可以说明这个依赖项可能是空的。如果你试图在没有注解的情况下传递空值,这个框架就不会执行它的工作。
更重要的是@Nullable可以与@NotNull注解一起使用。在这里你可以找到一些正确使用它们的提示。IntelliJ中的代码检查也可以检查注解并且帮助调试代码。
回答三
当然,这里肯定有不同的想法,我的想法是,我不能强制“永远不要传递空值”,因为我在处理不可控制的第三方的东西,例如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,为什么不直接将参数命名为mayB。所以你的想法是很清楚的。
文章翻译自Stack Overflow:https://stackoverflow.com/questions/14076296/nullable-annotation-usage