我看到java中的一些方法声明为:
void foo(@Nullable Object obj)
{ ... }
这里的 @Nullable
是什么意思?这是否意味着输入可能是null
?
没有注释,输入仍然可以为空,所以我猜这不仅仅是它?
@Nullable
?是Checker?吗
它清楚地表明该方法接受空值,并且如果您覆盖该方法,您也应该接受空值。
它还可以作为 FindBugs 等代码分析器的提示。例如,如果此类方法取消引用其参数而不首先检查 null,则 FindBugs 将发出警告。
此注解通常用于消除 NullPointerExceptions
。 @Nullable
表示此参数可能是 null
。在 Google Guice 中可以找到此类行为的一个很好的示例。在这个轻量级依赖注入框架中,你可以看出这个依赖可能是 null
。如果您尝试在没有注释的情况下通过 null
,框架将拒绝完成它的工作。
此外,@Nullable
可能与 @NotNull
注释一起使用。您可以在此处find一些关于如何正确使用它们的提示。 IntelliJ 中的代码检查检查注释并帮助调试代码。
诚然,肯定有不同的想法,在我的世界里,我不能强制执行“从不传递空值”,因为我正在与无法控制的第三方打交道,比如 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...
命名参数,这样您的意图就很清楚了。
不定期副业成功案例分享
if
语句的替换这是一种反模式,因为它不必要地创建了一个新对象。 Optional 的创建者在这里提到了这一点:youtube.com/embed/Ej0sss6cq14?start=1664&end=1800