JDK 9向Objects类添加了一些新方法,包括本文中突出显示的两个static方法: requireNonNullElse(T,T)和requireNonNullElseGet(T obj,Supplier <?extended T>供应商) 。 这两种方法使得更容易验证给定的对象是 null ,并且如果提供可变原来是提供一种替代的null 。 因此,这些方法和早期JDK版本中引入到Objects的相似方法[ requireNonNull(T) , requireNonNull(T,String)和requireNonNull(T,Supplier <String>) ]最有可能用于在方法中实现保护子句 。

当确定要测试的对象为null时,在上一段中提到的在JDK 9之前添加到Objects的三种方法不允许使用“默认”值。 相反,当传递给它们的变量为null时,这三个方法中的每一个都会引发NullPointerException 。 在JDK 9中添加到Objects的两个方法确实允许指定一个默认值,该默认值可以由该方法返回,而不是该方法抛出NullPointerException

Objects.requireNonNullElse(T,T)是两个新添加的方法中最直接的方法,用于指定当所测试的变量为null时要返回的默认对象。 下一个代码清单中显示了应用此方法的示例。

Objects.requireNonNullElse​(T,T)示例

/*** Provide instance of {@code Instant} that corresponds to* the provided instance of {@code Date}.** @param inputDate Instance of {@code Date} for which*    corresponding instance of {@code Instant} is desired;*    if this is {@code null}, an {@code Instant} representing*    "now" will be returned.* @return Instance of {@code Instant} extracted from provided*    {@Date} that will instead represent "now" if provided*    {@code Date} is {@code null}.*/
public Instant convertDateToInstantWithNowDefault(final Date inputDate)
{final Date dateToConvert= Objects.requireNonNullElse(inputDate, new Date());return dateToConvert.toInstant();
}

在上面的示例中,如果提供的Date类型的变量为null ,则返回提供的默认值“ now”(基于调用不接受参数的Date构造函数 )。

JDK 9还添加了Objects.requireNonNullElseGet(T,Supplier <? 该方法与前面讨论的方法的不同之处在于,它接受提供默认值的供应商 ,而不是接受相同类型的另一个对象作为默认值。

在强烈推荐的《 现代Java食谱 》一书中, Ken Kousen写道:“ Supplier的主要用例之一是支持延迟执行的概念。” 在讨论了Supplier在JDK中的用法之后,他补充说:“可以在您自己的代码中使用此延迟执行过程,以确保仅在适当时才从Supplier检索值。” 我的下一个示例演示了这一点。

接下来显示一个高度人为的代码清单,该清单演示了此方法接受Supplier

Objects.requireNonNullElseGet​(T,Supplier<? extends T>)示例

/*** Provide instance of {@code Instant} that corresponds to* the provided instance of {@code Date}.** @param inputDate Instance of {@code Date} for which*    corresponding instance of {@code Instant} is desired;*    if this is {@code null}, an {@code Instant} based on*    a complicated date calculation will be returned.* @return Instance of {@code Instant} extracted from provided*    {@Date} that will instead represent a calculated date if*    provided {@code Date} is {@code null}.*/
public Instant convertDateToInstantWithCalculatedDefault(final Date inputDate)
{final Date dateToConvert= Objects.requireNonNullElseGet(inputDate, () -> calculateDate());return dateToConvert.toInstant();
}

当用于确定默认值的代码预期长时间运行时,接受Supplier的方法的版本可能是有利的。 在这种情况下,仅当第一个传入的参数为null才执行长时间运行的方法。 当第一个传入的参数不为 null ,不会调用长时间运行的方法。 [顺便说一句,我在这里没有显示calculateDate()的实现,因为它是可笑的,但是可以说它有意地花费很长时间来执行。

覆盖在这个岗位,这两种方法可以很容易地检测一个特定的变量为null ,并代替它提供了一个合适的替代品时,它是null 。 这些可能最常用于实现“保护条款”,但是它们返回默认值的能力也可能导致其他用例。

翻译自: https://www.javacodegeeks.com/2018/02/jdk-9-notnullorelse-methods-added-objects-class.html

JDK 9:NotNullOrElse方法已添加到Objects类相关推荐

  1. objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类

    objects jdk8 JDK 9向Objects类添加了一些新方法,包括本文中突出显示的两个static方法: requireNonNullElse(T,T)和requireNonNullElse ...

  2. JDK 13:VM.events已添加到jcmd

    CSR( 兼容性和规范审查 ) JDK-8224601 ["提供VM.events诊断命令"]从JDK 13 Early Access Build #24 (日期为2019/6/6 ...

  3. Java中Objects类的方法介绍(已更新)

    使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...

  4. windows已添加Pin码仍提示添加的解决方法

    适用于出现: Pin码已添加仍提示要求添加,按照操作添加Pin后闪退 指纹识别失效 安全中心提示设置windows hello 解决方法: Win+R搜索services.msc 进入后检查以下服务是 ...

  5. video添加第一帧作为播放前图片(此方法 已失效)

    第一步:添加视频video标签,添加src, poster,controls属性 第二步:poster = src的值 + '?vframe/jpg/offset/1' 这样就可以显示视频第一帧图片了 ...

  6. vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd

    vm 安装jdk1.8 CSR( 兼容性和规范审查 ) JDK-8224601 ["提供VM.events诊断命令"]从JDK 13 Early Access Build #24 ...

  7. linux jdk免安装配置,生产环境免安装jdk的使用方法

    以下为<生产环境免安装jdk的使用方法>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 使用流程 一.概述 医院的 ...

  8. 新的JDK 11文件方法isSameContent()

    已经建议通过JDK-8202285将名为isSameContents()方法添加到JDK 11中的Files类中[[(fs)向文件中添加用于比较文件内容的方法"]. 由Joe Wang提议 ...

  9. java中Object和Objects类、toString方法和equals方法介绍

    Object类: Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类.Object中描述的所有方法其子类都可以使用.在对象 ...

最新文章

  1. windows7下安装MongoDB数据库
  2. 跨性别,你所不知道的事
  3. Node.js 应用故障排查手册 —— Node.js 性能平台使用指南
  4. java生成j动态页面_zk动态产生多个页面的例子代码
  5. 统计带头结点的单向链表的个数并存放在形参n所指的单元中。 欢迎评论 指点。
  6. 【最佳实践】OSS开源工具ossutil-大文件断点续传
  7. WCF 第一章 基础 更多关于配置文件的内容
  8. 作为面试官,我是怎么快速判断程序员能力的?
  9. 夺命雷公狗---微信开发18----删除自定义菜单
  10. 哔哩哔哩---P2 WPF基础入门视频(布局)
  11. mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
  12. 利用ENVI深度学习进行遥感变化监测
  13. git push时提示邮箱格式不正确
  14. 从哲学的视角看待项目生命周期——构建不一样的世界
  15. ODL构建Hello项目
  16. 旋转变换,变换后改变图片大小
  17. 个人实践,B450锐龙3600安装原版win7方法
  18. 如何让div靠右_如何让div靠右
  19. 冒泡排序【必会知识】
  20. 中职计算机英语视频,中职计算机微课视频一等奖(中职英语微课)

热门文章

  1. JavaFX官方教程(八)之JavaFX中的动画和视觉效果
  2. JAVA面试常考系列十一
  3. 1分钟了解区块链的本质
  4. Object.keys方法拿到对象的key值
  5. 如何从Gitee中拉取项目到HBuilder中?
  6. 《走遍中国》珍藏版(二)
  7. java知识点总结(二)
  8. java实现动态验证码源代码——jsp页面
  9. java内部类选择题_java内部类详解(附相关面试题)
  10. spring的PathMatchingResourcePatternResolver基于ant通配符匹配路径遍历项目所有xml文件