@Nullable 注解的用法| Java Debug 笔记

6,051 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:@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");
}

你也可以通过交换. orelseorElseThrow(() -> new exception (" don ' send a null"))的位置来抛出一些异常。

如果你不想使用不会添加任何功能的@Nullable,为什么不直接将参数命名为mayB。所以你的想法是很清楚的。

文章翻译自Stack Overflow:stackoverflow.com/questions/1…