JDK 9:NotNullOrElse方法已添加到Objects类
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类相关推荐
- objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类
objects jdk8 JDK 9向Objects类添加了一些新方法,包括本文中突出显示的两个static方法: requireNonNullElse(T,T)和requireNonNullElse ...
- JDK 13:VM.events已添加到jcmd
CSR( 兼容性和规范审查 ) JDK-8224601 ["提供VM.events诊断命令"]从JDK 13 Early Access Build #24 (日期为2019/6/6 ...
- Java中Objects类的方法介绍(已更新)
使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...
- windows已添加Pin码仍提示添加的解决方法
适用于出现: Pin码已添加仍提示要求添加,按照操作添加Pin后闪退 指纹识别失效 安全中心提示设置windows hello 解决方法: Win+R搜索services.msc 进入后检查以下服务是 ...
- video添加第一帧作为播放前图片(此方法 已失效)
第一步:添加视频video标签,添加src, poster,controls属性 第二步:poster = src的值 + '?vframe/jpg/offset/1' 这样就可以显示视频第一帧图片了 ...
- vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd
vm 安装jdk1.8 CSR( 兼容性和规范审查 ) JDK-8224601 ["提供VM.events诊断命令"]从JDK 13 Early Access Build #24 ...
- linux jdk免安装配置,生产环境免安装jdk的使用方法
以下为<生产环境免安装jdk的使用方法>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 使用流程 一.概述 医院的 ...
- 新的JDK 11文件方法isSameContent()
已经建议通过JDK-8202285将名为isSameContents()方法添加到JDK 11中的Files类中[[(fs)向文件中添加用于比较文件内容的方法"]. 由Joe Wang提议 ...
- java中Object和Objects类、toString方法和equals方法介绍
Object类: Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类.Object中描述的所有方法其子类都可以使用.在对象 ...
最新文章
- windows7下安装MongoDB数据库
- 跨性别,你所不知道的事
- Node.js 应用故障排查手册 —— Node.js 性能平台使用指南
- java生成j动态页面_zk动态产生多个页面的例子代码
- 统计带头结点的单向链表的个数并存放在形参n所指的单元中。 欢迎评论 指点。
- 【最佳实践】OSS开源工具ossutil-大文件断点续传
- WCF 第一章 基础 更多关于配置文件的内容
- 作为面试官,我是怎么快速判断程序员能力的?
- 夺命雷公狗---微信开发18----删除自定义菜单
- 哔哩哔哩---P2 WPF基础入门视频(布局)
- mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
- 利用ENVI深度学习进行遥感变化监测
- git push时提示邮箱格式不正确
- 从哲学的视角看待项目生命周期——构建不一样的世界
- ODL构建Hello项目
- 旋转变换,变换后改变图片大小
- 个人实践,B450锐龙3600安装原版win7方法
- 如何让div靠右_如何让div靠右
- 冒泡排序【必会知识】
- 中职计算机英语视频,中职计算机微课视频一等奖(中职英语微课)