@Nullable 注解用法
Posted
技术标签:
【中文标题】@Nullable 注解用法【英文标题】:@Nullable annotation usage 【发布时间】:2012-12-14 02:51:57 【问题描述】:我看到java中的一些方法声明为:
void foo(@Nullable Object obj)
...
这里的@Nullable
是什么意思?这是否意味着输入可能是null
?
没有注解,输入仍然可以为空,所以我猜不只是它?
【问题讨论】:
从下面的答案中,我了解到注释表明空值是可以接受的,它的使用示例,我可以尝试的代码分析器,并且解释可能会有所不同。看看为什么这种格式很好?全方位 +1,尤其是在提出这个问题时。 哪个库在您的问题中提供@Nullable
?是Checker?
见***.com/questions/4963300
【参考方案1】:
清楚地表明该方法接受空值,并且如果您覆盖该方法,您也应该接受空值。
它还可以作为FindBugs 等代码分析器的提示。例如,如果此类方法取消引用其参数而不首先检查 null,则 FindBugs 将发出警告。
【讨论】:
【参考方案2】:这个注解常用来消除NullPointerExceptions
。 @Nullable
表示这个参数可能是null
。这种行为的一个很好的例子可以在Google Guice 中找到。在这个轻量级的依赖注入框架中,你可以看出这个依赖可能是null
。如果您尝试在没有注释的情况下传递null
,框架将拒绝完成它的工作。
更重要的是,@Nullable
可能与@NotNull
注释一起使用。在这里你可以find一些关于如何正确使用它们的提示。 IntelliJ 中的代码检查检查注释并帮助调试代码。
【讨论】:
【参考方案3】:不同的工具可能会以不同的方式解释@Nullable
的含义。例如,Checker Framework 和 FindBugs 句柄 @Nullable
differently。
【讨论】:
【参考方案4】:当然,肯定有不同的想法,在我的世界里,我不能强制执行“从不传递 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...
命名参数,这样您的意图就很明确了。
【讨论】:
使用 Optional 作为if
语句的替换这是一种反模式,因为它不必要地创建了一个新对象。 Optional 的创建者在这里提到了这一点:youtube.com/embed/Ej0sss6cq14?start=1664&end=1800以上是关于@Nullable 注解用法的主要内容,如果未能解决你的问题,请参考以下文章
Spring 从0开始Spring5 新功能 - @Nullable 注解和函数式注册对象
loadNibNamed:(NSString *)name owner:(nullable id)owner options:(nullable NSDictionary *)options用法(示例
PySpark:StructField(..., ..., False) 总是返回 `nullable=true` 而不是 `nullable=false`