@Nullable注释用法

时间:2012-12-28 21:54:07

标签: java annotations

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

的方法
void foo(@Nullable Object obj)
{ ... }

这里@Nullable的含义是什么?这是否意味着输入可能是null? 没有注释,输入仍然可以为空,所以我猜这不仅仅是它吗?

由于

4 个答案:

答案 0 :(得分:333)

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

它还可以作为FindBugs等代码分析器的提示。例如,如果这样的方法取消引用其参数而不先检查null,则FindBugs将发出警告。

答案 1 :(得分:79)

此注释通常用于消除NullPointerExceptions@Nullable经常说这个参数可能是null。在Google Guice中可以找到这种行为的好例子。在这个轻量级依赖注入框架中,您可以告诉该依赖关系可能是null。如果您尝试传递null而没有注释,框架将拒绝执行此任务。

@Nullable可以与@NotNull注释一起使用。在这里,您可以find一些提示如何正确使用它们。 IntelliJ中的代码检查会检查注释并帮助调试代码。

答案 2 :(得分:16)

不同的工具可能会以不同的方式解释@Nullable的含义。例如,Checker FrameworkFindBugs句柄@Nullable differently

答案 3 :(得分:2)

当然,在我的世界中,肯定有不同的想法,因为我正在与不可控制的第三方(例如API调用者,数据库记录,前程序员等)打交道,因此我无法强制执行“永不传递null” ...所以我很偏执,防御方法。由于您使用的是Java8或更高版本,因此有比if块更干净的方法。

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

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

如果您不想使用@Nullable,它不会在功能上添加任何内容,那么为什么不直接使用mayBe...命名参数,这样您的意图就清楚了。