为什么要使用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

回到顶部