我在Java中看到一些声明为的方法:
void foo(@Nullable Object obj)
{ ... }
有什么意义@Nullable
吗?这是否意味着输入可能是null
?
如果没有注释,输入仍然可以为null,所以我猜不仅仅是吗?
@Nullable
根据您的问题提供哪个图书馆?是Checker吗?
我在Java中看到一些声明为的方法:
void foo(@Nullable Object obj)
{ ... }
有什么意义@Nullable
吗?这是否意味着输入可能是null
?
如果没有注释,输入仍然可以为null,所以我猜不仅仅是吗?
@Nullable
根据您的问题提供哪个图书馆?是Checker吗?
Answers:
此注释通常用于消除NullPointerExceptions
。@Nullable
表示此参数可能是null
。在Google Guice中可以找到这种行为的一个很好的例子。在这个轻量级的依赖注入框架中,您可以确定此依赖可能是null
。如果您尝试通过null
没有注释的框架,那么框架将拒绝执行此任务。
注释@Nullable
可以使用更多内容@NotNull
。在这里,您可以找到有关如何正确使用它们的一些提示。IntelliJ中的代码检查可检查注释并帮助调试代码。
不同的工具可能会解释@Nullable
不同的含义。例如,Checker Framework和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"))
。
如果您不想使用@Nullable,它不会在功能上添加任何内容,那么为什么不直接使用参数命名,mayBe...
这样您的意图就很清楚了。