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很关键 ...
随机推荐
- C语言学习系列(三)C程序结构
一.C程序结构 C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 new C program demo: #include <stdio.h> /*预处 ...
- javascript---操作节点
快捷键:jiedian(节点) 节点增删改appendChild() insertBefore() replaceNode() <!DOCTYPE html><html lang=& ...
- 008_STM32之_keil编译内存大小解析
Program Size: Code=28784 RO-data=6480 RW-data=60 ZI-data=3900 的含义 1. Code: 程序所占用的FLASH大小,存储在FLASH. ...
- LOJ166 拉格朗日插值 2【卷积,NTT】
题目链接:LOJ 题目描述:输入多项式的次数$n$,一个整数$m$和$f(0),f(1),f(2),\ldots,f(n)$,输出$f(m),f(m+1),f(m+2),\ldots,f(m+n)$ ...
- CodeForces - 999B Reversing Encryption
B - Reversing Encryption A string s of length n can be encrypted by the following algorithm: iterate ...
- openpyxl模块(excel操作)
openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...
- re,xpath,BeautifulSoup三种方法爬取古诗词网上诗歌
re,xpath ,bs4对同一个页面的解析速度发现re比xpath快接近10倍,xpath比bs4快接近10倍可见要想追求极致速度,使用正则表达式解析有多重要 1.re解析的代码 # 使用正则表达式 ...
- postman学习总结
从网上各处学习总结,会有不足之处,后期不断补充中... 一.get\post请求参数 1.get类型 (1)选择请求方式GET (2)输入完整的URL (3)在param中填写参数,点击send发送请 ...
- c++ 使用类生成随机数
// generate algorithm example #include <iostream> // cout #include <algorithm> // genera ...
- 【转】java 解析多层json
java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso ...