Optional类快速上手

news/2024/11/24 14:10:52/

目录

一、概述

二、使用

1、创建对象

2、安全消费值

3、安全获取值

4、过滤

5、判断

6、数据转换


一、概述

我们在编码的时出现最多的就是空指针异常,所以在很多情况下我们需要做各种非空的判断。

尤其是对象中的属性还是一个对象的情况下,这种判断会让代码显得臃肿

所以在JDK8中引入了Optional,可以写出更优雅的代码来避免空指针异常

并且在很多函数式编程相关的API中也都用到了Optional,如果不会使用Optiona也会对函数式编程的学习造成影响。

二、使用

1、创建对象

Optional就好像是包装类,可以把我们的具体数据封装Optional对象内部。然后我们去使用Optional中封装好的方法操作封装进去的数据就可以非常优雅的避免空指针异常。

我们一般使用Optional静态方法ofNullable来把数据封装成一个Optional对象。无论传入的参数是否为null都不会出现问题

你可能会觉得还要加一行代码来封装数据比较麻烦。但是如果改造下getAuthor方法,让其的返回值就是封装好的Optional的话,我们在使用时就会方便很多。

而且在实际开发中我们的数据很多是从数据库获取的,Mybatis从3.5版本可以也已经支持Optional了,我们可以直接把dao方法的返回值类型定义成Optional类型,MyBastis会自己把数据封装成Optional对象返回。封装的过程也不需要我们自己操作。

如果你确定一个对象不是空的则可以使用optional的静态方法of来把数据封装成Optional对象

但是一定要注意,如果使用of的时候传入的参数必须不为null。 (尝试下传入null会出现什么结果)

如果一个方法的返回值类型是ptional类型。而如果我们经判断发现某次计算得到的返回值为null,这个时候就需要把nul封装成ptional对象返回。这时可以使用optional的静态方法empty来进行封装

aptiona1.empty()

2、安全消费值

我们获取到一个Optiona对象后肯定需要对其中的数据进行使用。这时候我们可以使用其ifPresent方法对来消费其中的值。这个方法会判断其内封装的数据是否为空,不为空时才会执行具体的消费代码。这样使用起来就更加安全了。例如,以下写法就优雅的避免了空指针异常

3、安全获取值

如果我们期望安全的获取值,不推荐使用Optional的get,而是以下方法

ofElseGet:获取数据并设置数据为空的默认值,如果数据不为空就获取数据值,如果为空则根据你传入的参数来创建对象作为默认值返回

ofElseThrow:如果数据不为空就获取该数据,为空则根据你传入的参数来创建异常抛出

4、过滤

我们可以用filter方法对数据过滤,如果原本有数据的,但是不符合判断也会变无数据的Optional

5、判断

可以用isPresent方法进行是否存在数据的判断,如果空返回false,有数据返回true,更推荐使用ifPresent方法

6、数据转换

map方法可以让我们数据进行转化,并且得到数据是被Optional包装好的,包装使用安全

 


http://www.ppmy.cn/news/43273.html

相关文章

android ndk 编译 libevent

android ndk 编译 libevent Russinovichs Blog 2022-10-19 原文 https://www.shuzhiduo.com/A/rV57oAKG5P/ 下载 libevent 2.1.8 版本 https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz 先在 win10 上用 wsl ubun…

【计算机网络-传输层】TCP 协议

文章目录1 传输层概述1.1 传输层的功能1.2 端口号2 TCP 报文段2.1 TCP 报文段首部格式2.2 TCP 数据传送的过程3 TCP 连接管理3.1 TCP 连接的建立——三次握手3.1.1 客户机向服务器发送 TCP 连接请求报文段3.1.2 服务器向客户机发送 TCP 连接请求确认报文段3.1.3 客户机向服务器…

数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)

目录 二叉树的定义 二叉树具体的五种基本形态 1.空树 2.只有一个节点 3.有左子树,但右子树为空 4.有右子树,但左子树为空 5.左右两子树都不为空 特殊二叉树 斜二叉树 满二叉树 完全二叉树 二叉树的几个重要性质 初识二叉树的几个操作函数 …

软件测试工作主要做什么

随着信息技术的发展和普及,人们对软件的使用越来越普及。但是在软件的使用过程中,软件的效果却不尽如人意。为了确保软件的质量,整个软件业界已经逐渐意识到测试的重要性,也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…

Moonbeam操作指南 | 如何设置Moonbeam开发节点

Moonbeam开发节点是为本地构建和测试应用的个人开发环境。对以太坊开发者来说,可以和Ganache相媲美。可以使你快速上手,且无需中继链的支出即可轻松实现。 有2种方式可以开始运行节点:使用Docker运行一个预构建的二进制文件,或者…

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件,也是固态继电器的一种,其主要作用是隔离输入与输出电路,用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号,通过光纤传输到另一端,再由另一端的…

C#使用EF框架连接SQLServer数据库

C#中使用Entity Framework (EF)连接SQL Server数据库可以使用多种方法,其中比较常用的是Code First和Database First两种方式。 Code First方式 Code First是指通过C#代码来定义数据模型,EF会根据代码自动生成数据库结构。使用Code First需要进行以下步…

JavaWeb开发 —— Web入门

目录 一、Spring 二、SpringBootWeb快速入门 三、HTTP协议 1. 概述 2. 请求协议 3. 响应协议 四、Web服务器 - Tomcat 1. 介绍 2. 基本使用 3. 入门程序解析 一、Spring ① 官网:http://spring.io ② Spring 发展到今天已经形成了一种开发生态圈&…