Java @可为空的注释用法
我看到java中的一些方法声明为:Java @可为空的注释用法,java,annotations,Java,Annotations,我看到java中的一些方法声明为: void foo(@Nullable Object obj) { ... } 这里的@Nullable是什么意思?这是否意味着输入可能是空的 如果没有注释,输入仍然可以为null,因此我想这不仅仅是它的问题?它清楚地表明,该方法接受null值,如果重写该方法,也应该接受null值 它还可以作为代码分析器的提示,例如。例如,如果这样一个方法在没有首先检查null的情况下取消引用其参数,FindBugs将发出警告。此注释通常用于消除NullPointerExce
void foo(@Nullable Object obj)
{ ... }
这里的@Nullable
是什么意思?这是否意味着输入可能是空的
如果没有注释,输入仍然可以为null,因此我想这不仅仅是它的问题?它清楚地表明,该方法接受null值,如果重写该方法,也应该接受null值
它还可以作为代码分析器的提示,例如。例如,如果这样一个方法在没有首先检查null的情况下取消引用其参数,FindBugs将发出警告。此注释通常用于消除
NullPointerException
@Nullable
表示此参数可能为null
。这种行为的一个很好的例子可以在中找到。在这个轻量级依赖项注入框架中,您可以看出这个依赖项可能是null
。如果您试图在没有注释的情况下传递null
,框架将拒绝执行它的任务
更重要的是,
@Nullable
可以与@NotNull
注释一起使用。在这里你可以找到一些正确使用它们的技巧。IntelliJ中的代码检查检查注释并帮助调试代码。不同的工具可能会以不同的方式解释@Nullable
的含义。例如,和handle@Nullable
被授予,肯定有不同的想法,在我的世界里,我不能强制执行“永不传递null”,因为我正在与不可控的第三方打交道,如API调用方、数据库记录、前程序员等。。。因此,我偏执和防御性的方法。因为您使用的是Java8或更高版本,所以有一种比if
块更干净的方法
public String foo(@Nullable String mayBeNothing) {
return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}
您还可以通过将.orElse
交换到
orelsetrow(()->新异常(“不要发送空值”)
如果您不想使用@Nullable,因为它在功能上没有添加任何内容,那么为什么不使用
mayBe…
来命名参数呢?这样您的意图就很清楚了。从下面的答案中,我了解到注释表明可以接受空值,以及使用它的示例,我可以试用代码分析器,解释可能会有所不同。明白为什么这种格式是好的吗+1全面,特别是问这个问题。在你的问题中,哪个库提供了@Nullable
?如果这是一个反模式,因为它不必要地创建了一个新对象,那么可以使用Optional替换语句。Optional的创建者在这里提到了这一点: