我注意到Oracle JDK中的许多Java 8方法都使用,如果给定的对象(参数)是,则在内部抛出。Objects.requireNonNull()
NullPointerException
null
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
但如果一个对象被取消引用,无论如何都会被抛出。那么,为什么要做这个额外的空检查和抛出
呢?NullPointerException
null
NullPointerException
一个显而易见的答案(或好处)是它使代码更具可读性,我同意。我很想知道在方法开始时使用
的任何其他原因。Objects.requireNonNull()
因为你可以通过这样做把事情说清楚。喜欢:
public class Foo {
private final Bar bar;
public Foo(Bar bar) {
Objects.requireNonNull(bar, "bar must not be null");
this.bar = bar;
}
或更短:
this.bar = Objects.requireNonNull(bar, "bar must not be null");
现在你知道了:
new()
将其与以下条件进行比较:您今天创建了一个 Foo 对象,明天您调用了一个使用该字段并抛出的方法。最有可能的是,您明天不会知道为什么该引用昨天传递给构造函数时为 null!
换句话说:通过显式使用此方法检查传入引用,可以控制引发异常的时间点。大多数时候,你希望尽快失败!
主要优点是:
bar
if (bar == null)
代码应尽快崩溃。它不应该做一半的工作,取消引用null,然后才崩溃,留下一半的工作,导致系统处于无效状态。
这通常称为“早期失败”或“快速失败”。
但是,如果取消引用空对象,则无论如何都会抛出 NullPointerException。那么,为什么要做这个额外的空检查并抛出 NullPointerException?
这意味着您可以立即可靠地检测到问题。
考虑:
.NET 通过将(“您取消引用了 null 值”)与(“您不应该将 null 作为参数传递 – 并且是针对此参数)分开,可以更好地做到这一点。我希望 Java 也做同样的事情,但即使只有一个 ,如果在可以检测到错误的最早点抛出错误,修复代码仍然容易得多。NullReferenceException
ArgumentNullException
NullPointerException
模板简介:该模板名称为【 Java 为什么要使用 Objects.requireNonNull()?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。