为什么要使用Objects.requireNonNull()?
我注意到,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
取消引用对象,则将被抛出。那么,为什么要做这个额外的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");
现在您 :
- 当 成功使用创建Foo对象时
new()
- 则 *
比较一下:今天创建一个Foo对象, 创建一个使用该字段并引发的方法。最有可能的是,明天您将不知道为什么 昨天
将该引用传递给构造函数时,该引用为空!
换句话说:通过显式使用此方法检查 传入的 引用,您可以 引发异常的时间点。而且在大多数情况下,您想尽快 失败 !
主要优点是:
- 如前所述, 控制 行为
- 调试更容易-因为您在创建对象的上下文中抛出错误。在某个时间点,您很有可能日志/跟踪记录会告诉您出了什么问题!
- 如上所示:这个想法的真正力量与 最终 领域一起展现。因为现在您的课程中的 任何其他代码 都可以安全地假定它
bar
不是null-因此您不需要if (bar == null)
在其他地方进行任何检查!
以上是 为什么要使用Objects.requireNonNull()? 的全部内容, 来源链接: utcz.com/qa/425156.html