首页 > Java >  Java 为什么要使用 Objects.requireNonNull()?

 Java 为什么要使用 Objects.requireNonNull()?

上一篇 下一篇

我注意到Oracle JDK中的许多Java 8方法都使用,如果给定的对象(参数)是,则在内部抛出。Objects.requireNonNull()NullPointerExceptionnull

public static <T> T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}

但如果一个对象被取消引用,无论如何都会被抛出。那么,为什么要做这个额外的空检查和抛出
呢?
NullPointerExceptionnullNullPointerException

一个显而易见的答案(或好处)是它使代码更具可读性,我同意。我很想知道在方法开始时使用
的任何其他原因。
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!

换句话说:通过显式使用此方法检查传入引用,可以控制引发异常的时间点。大多数时候,你希望尽快失败

主要优点是:

  • 如前所述,受控行为
  • 更容易调试 – 因为您在对象创建的上下文中抛出。在某个时间点,您的日志/跟踪有一定的可能性告诉您出了什么问题!
  • 如上所示:这个想法的真正力量与最终领域一起展开。因为现在类中的任何其他代码都可以安全地假定它不是 null – 因此您不需要在其他地方进行任何检查!barif (bar == null)

分割线

网友回答:

快速故障

代码应尽快崩溃。它不应该做一半的工作,取消引用null,然后才崩溃,留下一半的工作,导致系统处于无效状态。

这通常称为“早期失败”或“快速失败”。

分割线

网友回答:

但是,如果取消引用空对象,则无论如何都会抛出 NullPointerException。那么,为什么要做这个额外的空检查并抛出 NullPointerException?

这意味着您可以立即可靠地检测到问题。

考虑:

  • 该引用可能直到方法的后面使用,在您的代码已经执行了一些副作用之后
  • 在此方法中,引用可能根本不被取消引用
    • 它可以传递给完全不同的代码(即代码空间中的原因和错误相距甚远)
    • 它可以在以后使用(即原因和错误在时间上相距甚远)
  • 它可能在空引用有效但具有意外效果的某处使用

.NET 通过将(“您取消引用了 null 值”)与(“您不应该将 null 作为参数传递 – 并且是针对此参数)分开,可以更好地做到这一点。我希望 Java 也做同样的事情,但即使只有一个 ,如果在可以检测到错误的最早点抛出错误,修复代码仍然容易得多NullReferenceExceptionArgumentNullExceptionNullPointerException

模板简介:该模板名称为【 Java 为什么要使用 Objects.requireNonNull()?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 246次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-20
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 微信素材 html5 微信文章 企业网站 响应式 单页式简历模板 微信图片 微信公众平台 微信模板
您可能会喜欢的其他模板