objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类
objects jdk8
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 <?extended T>)方法用于类似目的。 该方法与前面讨论的方法的不同之处在于,它接受提供默认值的供应商 ,而不是接受相同类型的另一个对象作为默认值。
Ken Kousen在强烈推荐的《 现代Java食谱 》一书中写道:“ 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
objects jdk8
objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类相关推荐
- JDK 9:NotNullOrElse方法已添加到Objects类
JDK 9向Objects类添加了一些新方法,包括本文中突出显示的两个static方法: requireNonNullElse(T,T)和requireNonNullElseGet(T obj,Sup ...
- 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 ...
- JDK 13:VM.events已添加到jcmd
CSR( 兼容性和规范审查 ) JDK-8224601 ["提供VM.events诊断命令"]从JDK 13 Early Access Build #24 (日期为2019/6/6 ...
- 关于阿里云已添加域名解析记录,证书申请显示未检测到DNS配置记录,请修改后重新发起审核的原因。
1.环境: 域名 证书(可申请Symantec 免费版 SSL) 阿里云 2.错误问题: 错误问题:已添加域名解析记录,证书申请显示未检测到DNS配置记录. 错误效果图 3.错误原因: 到此链接查询域 ...
- jQuery使用toggleClass方法动态添加删除Class样式的方法
本文实例讲述了jQuery使用toggleClass方法动态添加删除Class样式的方法.分享给大家供大家参考.具体分析如下: jQuery通过toggleClass方法动态添加删除Class,一次执 ...
- Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag
Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag 转载于:https://www.cnblogs.com/zhujiabin/p/508568 ...
- RNN调试错误:lstm_cell = tf.contrib.rnn.core_rnn_cell.BasicLSTMCell(lstm_size) 方法已失效
调试递归神经网络(RNN)的时候出现如下错误: ### module 'tensorflow.contrib.rnn' has no attribute 'core_rnn_cell' 经检查是tf. ...
最新文章
- Microbiome:应用多维宏组学方法协同揭示复杂细菌群落对目标底物代谢的菌间相互关系(一作解读)...
- centos安装emqtt_benchmark
- gatdata获取曲线_GetData软件使用--获取曲线图中的数据
- 对页面制定区域进行打印,以及打印不显示页脚URL的方法
- .Net Conf 2020 之回顾
- java object转泛型_为什么Java的泛型要用擦除实现
- VMware 虚拟机占用磁盘空间
- python计算最大回撤_Python做量化投资评价策略风险 如何计算最大回撤?
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
- python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉
- 【下载https协议需要的cer证书】
- Vue工程测试Element-UI插件是否可用步骤
- 看了那些 Google 大神 Jeff Dean 的传说后,我跪了!
- Android和iOS人才招聘出现拐点 低能人才泛滥
- 《代码大全》读书笔记
- 地税计算机发展,当前我省地税信息化数据应用的现实状况和发展趋势
- 多模态情感分析论文解读——CTFN模型
- 网易云音乐linux安装路径,修复网易云音乐Linux版不能安装及运行的问题
- androidpn客户端深析
- pageContext对象的用法详述
热门文章
- 线段树动态开点 - - - > 线段树合并
- [AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)
- 震惊!温州一程序员编完八皇后吐血而亡,他的代码是什么样子?!!
- P7408-[JOI 2021 Final]ダンジョン 3【贪心,树状数组】
- P1375-小猫【卡特兰数】
- 2018/7/10-纪中某C组题【jzoj3792,jzoj3793,jzoj3794】
- 【jzoj】2018.1.30NOIP普及组——模拟赛D组
- 【线段树】开关(luogu 3870)
- HDU5833 异或方程组的初步学习
- SpringCloud Greenwich(一)注册中心之nacos、Zuul和 gateway网关配置