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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户登陆_华为路由器AAA用户密码登陆你了解吗?

AAA Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;、Accounting&#xff08;&#xff09;它提供了认证、授权、计费三种安全功能,可以验证用户帐户是否合法&#xff0c;授权用户可以访问的服务&#xff0c;并记录用户使用网络资源的…

Java API 文档中的接口方法和抽象方法,有什么区别?

欲知详情&#xff0c;猛戳&#xff1a;https://www.zhihu.com/question/445956288

java程序设置jvm_Java程序员应在2018年学习的3种JVM语言

java程序设置jvm如果您是Java程序员&#xff0c;并且想学习更多的编程语言以扩展您的知识和技能&#xff0c;但是不确定选择哪种编程语言&#xff0c;那么您来对地方了。 在本文中&#xff0c;我将分享Java程序员可以在2018年学习的3种JVM语言以及为什么要学习它们。 成为多语种…

word域变成正常文本_【Word小技巧】不学会后悔哦~

工作中使用Word早已成了习惯&#xff0c;因此&#xff0c;今天小编将为大家分享几个实用的的Word小技巧。重叠字快速录入文字录入是word最基本操作&#xff0c;过程中我们难免要输入重叠字&#xff0c;例如&#xff1a;热热闹闹&#xff0c;卿卿我我等……你知道如何快速录入吗…

Java 中把声明变量的语句如果写在循环体内,每次执行时栈内存中的变量和数据是如何变化的?

问题一&#xff1a;如下面的代码示例 1&#xff0c;JVM 是不是会反复回收旧的变量 a 再重新创建新的变量 a 呢&#xff1f;还是旧的变量 a 一直保留在栈内&#xff0c;只是反复赋值 0 而已呢&#xff1f; 代码示例 1&#xff1a; while (true) { int a 0; a 5; }问题二&…

使用Speedment 3.0.17及更高版本简化了事务

交易次数 有时我们想确保我们的数据库操作是原子执行的&#xff0c;并且与其他操作分开。 这是交易起作用的地方。 交易是一组操作 数据库可能接受或不接受作为原子操作的建议。 因此&#xff0c;要么接受交易中的所有操作&#xff0c;要么不接受交易中的所有操作。 事务的另一…

python中常用的方法

python常用方法 字符串&#xff1a; name.title() #字符串的每个单词首字母大写 name.upper() #字符串的字母全部大写 name.lower() #字符串的字母全部小写 name.rstrip() #删除字符串结尾的空白 name.lstrip() #删除字符串开头的空白 name.strip() #删除…

sql server 2008 年累计数_Windows Server 2008 和 SQL Server 2008将终止支持 迁移至Azure 微软提供3年免费技术支持...

点击上方蓝色字关注我们~迁移至 Azure 并利用免费扩展安全更新。了解有关支持终止建议的更多信息&#xff0c;请使用浏览器访问&#xff1a;https://www.microsoft.com/zh-cn/sql-server/sql-server-2008.对您意味着什么1 2017年基于风险的安全报告; 思科 2017 年度网络安全报告…

递归调用方法时栈内存是如何变化的?(使用内存图演示递归调用过程)

文章目录 什么是栈内存演示方法递归调用过程什么是栈内存 在学习递归实现原理之前,我们先了解一下栈内存。 栈内存是计算机中的一种数据存储方式,是 Java 进程启动时候在内存中开辟的存储空间。 栈内存的利用方式遵循 LIFO(后迚先出)原则Java 所有局部变量都在栈中分配(压入…

旧版Requests库

requests库基本使用Requests解析库方法response对象response对象的属性**r.encoding**属性与**r.apparent_encoding**属性的区别requests库的异常举例Requests解析库 方法 最常用的两个方法: request.get() request.post() 作用&#xff1a;都是从服务器获取网页信息 区别&…

运行单个源文件_使用一个命令执行单个Java源文件

运行单个源文件JDK增强提案 &#xff08; JEP &#xff09; 草案于2017年末创建&#xff0c;名为“ 启动单文件源代码程序 ”&#xff08;其相关的JDK问题为JDK-8192920 &#xff09;。 顾名思义&#xff0c;该JEP草案旨在“增强Java启动器以支持运行作为Java源代码的单个文件提…

夸克浏览器怎么安装脚本_iOS 第一浏览器发布安卓版,除了真香我还能说什么...

如果不算 Safari 的话&#xff0c;iOS 平台公认最好的浏览器是 Alook。无推送无新闻无广告、日常售价 12 元、工具类排行第三、7.8 万个评分足以证明其优秀。以至于很多双持或对 Alook 有所了解的用户都希望 Alook 能推出安卓端。现在安卓端真的来了。(安卓端免费)假如这个时候…

Windows 10 笔记本如何使用外接显示器

文章目录如何连接外接显示屏如何设置显示模式如何设置不同显示屏各自的分辨率如何设置主显示器通过显卡来设置显示器如何连接外接显示屏 VGA 线或者 HDMI 线连接好电脑和显示器&#xff0c;以 HDMI 线为例简单讲下吧。 显示器可能会有多个 HDMI 接口&#xff0c;假设你插入 H…

蓝牙信号强度检测app_基于蓝牙技术的智能插座方案

有这样一句话“科技时代&#xff0c;生活轻快”。随着社会现代化程度越来越高&#xff0c;科技的应用为人们的生活带来便捷&#xff0c;大大提高了工作效率。纵观市场上“智能家居”产品很多&#xff0c;功能各异&#xff0c;各有千秋&#xff0c;但是针对家电控制的智能插座还…

图片清晰度,分辨率,像素总结

像素 像素是一个个小方块&#xff0c;是构成位图的基本单位。将图片放大即可看出来&#xff0c;如图&#xff1a; 分辨率 显示分辨率是指像素的总数量&#xff0c;如上图的22001400&#xff0c;也就是宽有2200个像素&#xff0c;高有1400个像素。 图像分辨率是指每英寸所包含…

apache isis_使用Apache Isis快速进行SEMAT应用程序开发

apache isisTL; DR这是关于一个帖子会谈SEMAT宠物项目我创建使用Apache伊希斯和部署到OpenShift在线这里http://semat.ofbizian.com Apache Isis 作为主要在后端系统上工作的Java开发人员&#xff0c;我讨厌创建用户界面和处理Java脚本。 幸运的是&#xff0c;有一些Java项目&…

MacBook外接显示器及相关设置详解(分屏/多屏)

文章目录一、连接显示器和电脑二、打开显示器设置界面三、调整显示器图标位置四、设置主显示器五、移动 Dock六、镜像模式七、合盖模式八、扩展模式九、设置外接显示器竖屏显示十、外接显示器后&#xff0c;如何调出更多分辨率十一、关于程序坞显示的问题一、连接显示器和电脑 …

ibm liberty_使用Eclipse和Open Liberty的Java EE 8上的Java 9

ibm liberty几周前&#xff0c;我写了一篇文章&#xff0c;题目是哪个IDE和服务器支持Java EE 8和Java9 &#xff0c;着眼于Java 9和Java EE 8之间的当前状态。您可以期望事情发展很快&#xff0c;现在我们有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5…

inkscape生成g代码_三点二. 量子对抗生成网络 (Quantum GAN)

理论基础之前我们介绍了强化学习Leo&#xff1a;和Leo一起学量子计算&#xff1a;三点一. 微分线路和强化学习​zhuanlan.zhihu.com上面这篇博文告诉我们如何把量子线路类比为神经网络&#xff0c;并获取它的导数。在可微分线路的基础上&#xff0c;我们可以做一些更加酷的事情…

python用xpath爬取10页网站图片

#爬取网站图片 import requests from lxml import etree import osi0 #计数 #请求头 headers{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"} for x in range(…