Optional的理解和使用
1、Optional 到底是什么?
Optional 是一个包装类。类中包装的对象可以为 NULL 或非 NULL。简单说就是把 NULL 包了一层,防止直接对 NULL 操作报NPE。
2、Optional 的方法说明:
定义:
- Optional 空实例:Optional 实例中的 value == null。
- 判断 Optional 是否存在:Optional 实例中的 value 是否为 null。
看一下Optional 中的源码,大概可以分为如下几类:
2.1 构造函数:2个
private Optional():构建一个空的 Optional 实例。实例中的 value == null
private Optional(T var1):构建一个Optional 实例。实例中的 value == var1。var1为NULL会抛NPE.
2.2 获取 Optional 实例方法
public static <T> Optional<T> empty():获取一个 Optional 空实例。
public static <T> Optional<T> of(T var0):获取一个 Optional 实例。var0为NULL会抛NPE。
public static <T> Optional<T> ofNullable(T var0):获取一个 Optional 实例。var0为 NULL 会返回一个 Optional 空实例。
2.2 获取 Optional 实例中的 value:
public T get():value 为空抛NoSuchElementException。
public T orElse(T var1):value 不为 NULL 则返回 value ;为 NULL 返回 var1。
public T orElseGet(Supplier<? extends T> var1):value 不为 NULL 则返回 value ;为 NULL 执行 var1。
public <X extends Throwable> T orElseThrow(Supplier<? extends X> var1) throws X:value 不为 NULL 则返回 value ;为 NULL 执行 var1。
2.3 判断 Optional 是否存在
public boolean isPresent():即返回 Optional 实例中的 value 是否为 NULL。
public void ifPresent(Consumer<? super T> var1): value 不为 NULL 则执行 var1。
2.4 判断是否相等
public boolean equals(Object var1):感觉不出来和其他 equals 有什么区别。唯一的区别就是如果 optional 实例中的 value 为 NULL 也不会有异常,而是会正常进行比较。
2.5 其他 Lambda 表达式的操作:
下面三个方法,如果当前对象为NULL,则返回自己或者一个 Optional 空实例。不 NULL 则执行后面的 Lambda,得到返回结果的Optional 实例。大概是这样,详细区别见源码吧。
public Optional<T> filter(Predicate<? super T> var1):
public <U> Optional<U> map(Function<? super T, ? extends U> var1):
public <U> Optional<U> flatMap(Function<? super T, Optional<U>> var1):
3、Optional 的使用:
暂时没有实例。后续用到了再补。
可先参考:Java高级(三):Optional的巧用 - 知乎
4、参考:
Optional的理解和使用的更多相关文章
- java8 stream编程
说明:这是基于同事的培训材料做的练习,记录下来,以作日后自己coding分析和改进 1.准备 pom.xml <dependency> <groupId>org.apache. ...
- 是时候优雅的和NullPointException说再见了
是时候优雅的和NullPointException说再见了 ️️️️️️️️️️️️️️️️ 最近在参加原创投稿比赛,本篇文章如果对你有帮助的话,欢迎帮忙点击助力下吧 NullPointExcepti ...
- [翻译]理解Swift中的Optional
原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...
- map和flatmap的区别+理解、学习与使用 Java 中的 Optional
转自:map和flatmap的区别 对于stream, 两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为n ...
- 理解、学习与使用 Java 中的 Optional
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都 ...
- 理解、学习与使用 JAVA 中的 OPTIONAL<转>
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...
- 理解、学习与使用Java中的Optional
从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异 ...
- Optional 理解
目录 Optional 理解 1. 含义 2. Optional 类中方法 3. Optional 对象不应该作为方法参数 Optional 理解 1. 含义 Optional 是一个容器对象,该容器 ...
- 理解、学习与使用 JAVA 中的 Optional【转载】
这是一篇转载的文章.刚学java的时候看了好久这个Optional,但一直是懵的.今天又又遇到了,重新回来再看的时候,发现并没有那么难道那个. 转载的文章再开头处写了一个对于理解Optional很关键 ...
随机推荐
- [Google Guava] 1.1-使用和避免null
原文链接 译文链接 译者: 沈义扬 Doug Lea 说,“Null 真糟糕.” 当Sir C. A. R. Hoare 使用了null引用后说,”使用它导致了十亿美金的错误.” 轻率地使用 ...
- HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛
普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...
- webuploader+文件夹上传
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- python ros 设置机器人的位置
#!/usr/bin/env python import rospy import math from tf import transformations from geometry_msgs.msg ...
- 爬虫之python3用execjs执行JS代码
JS运行环境 Node.js 是Javascript语言服务器端运行环境 安装和配置:https://www.runoob.com/nodejs/nodejs-install-setup.html 测 ...
- struts2方法无法映射问题:There is no Action mapped for namespace [/] and action name [m_hi] associated with context path []
使用struts的都知道,下面使用通配符定义的方式很常见,并且使用也很方便: <action name="Crud_*" class="example.Crud&q ...
- MYSQL的两种存储引擎区别
Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL ...
- 能不能支持在线查看word,excel这样的文件?还有拖拽上传功能?
https://forum.enhancer.io/topic/5adea0cdce69735af635fcd8 方法1. 用一个自定义窗口, 自定义窗口里放一个iframe 假设你的 word 的地 ...
- Leetcode题目543:二叉树的直径(简单)
题目描述: 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, ...
- 重读APUE(2)-read返回值少于要求读取字节数
返回值: 成功返回读到的字节数,如果达到文件尾,则返回0:注意:如果有数据第一次读取会返回全部读到的字节数,下一次读取才会返回0: 出错返回-1: 返回值少于要求读取字节数的情况: 1. 读取普通文件 ...