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、参考:

  1. Java 8 中文版 - 在线 API 中文手册 - 码工具
  2. 使用 Java8 Optional 的正确姿势 | 隔叶黄莺 Yanbin Blog - 软件编程实践
    注:先参考一下。后续再完善。
  3. Java高级(三):Optional的巧用 - 知乎
  4. 深入理解 java8 中的 Optional 类 - 至宝屠夫的博客 - CSDN 博客

Optional的理解和使用的更多相关文章

  1. java8 stream编程

    说明:这是基于同事的培训材料做的练习,记录下来,以作日后自己coding分析和改进 1.准备 pom.xml <dependency> <groupId>org.apache. ...

  2. 是时候优雅的和NullPointException说再见了

    是时候优雅的和NullPointException说再见了 ️️️️️️️️️️️️️️️️ 最近在参加原创投稿比赛,本篇文章如果对你有帮助的话,欢迎帮忙点击助力下吧 NullPointExcepti ...

  3. [翻译]理解Swift中的Optional

    原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你 ...

  4. map和flatmap的区别+理解、学习与使用 Java 中的 Optional

    转自:map和flatmap的区别 对于stream,   两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为n ...

  5. 理解、学习与使用 Java 中的 Optional

    从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都 ...

  6. 理解、学习与使用 JAVA 中的 OPTIONAL<转>

    从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...

  7. 理解、学习与使用Java中的Optional

    从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异 ...

  8. Optional 理解

    目录 Optional 理解 1. 含义 2. Optional 类中方法 3. Optional 对象不应该作为方法参数 Optional 理解 1. 含义 Optional 是一个容器对象,该容器 ...

  9. 理解、学习与使用 JAVA 中的 Optional【转载】

    这是一篇转载的文章.刚学java的时候看了好久这个Optional,但一直是懵的.今天又又遇到了,重新回来再看的时候,发现并没有那么难道那个. 转载的文章再开头处写了一个对于理解Optional很关键 ...

随机推荐

  1. windows builder里面的可伸缩面板

    使用 org.eclipse.wb.core.controls.flyout.FlyoutControlComposite.FlyoutControlComposite类 构造方法中传入的prefer ...

  2. selenium报错以及各解决方法

    1.driver.findElement(By.name("wd")).sendKeys("selenium"); 报错:The method sendKeys ...

  3. 10、Spring Boot 2.x 集成 Log4j2

    1.10 Spring Boot 2.x 集成 Log4j2 完整源码: Spring-Boot-Demos

  4. java大视频上传实现

    理清思路: 引入了两个概念:块(block)和片(chunk).每个块由一到多个片组成,而一个资源则由一到多个块组成 块是服务端的永久数据存储单位,片则只在分片上传过程中作为临时存储的单位.服务端会以 ...

  5. Codevs 1242 布局 2005年USACO(差分约束)

    1242 布局 2005年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...

  6. 【概率论】2-2:独立事件(Independent Events)

    title: [概率论]2-2:独立事件(Independent Events) categories: Mathematic Probability keywords: Independent Ev ...

  7. Maxim-可自定义的Monkey测试工具(Android)

    Maxim 基于monkey做的二次开发,相比原始monkey,新增如下功能 多种随机测试模式:dfs(深度遍历) mix模式(monkey随机测试+控件识别) troy模式(按照控件选择器进行遍历) ...

  8. shell 显示详细信息

    MacdeMacBook-Pro:test macname$ ls -al | more total drwxr-xr-x macname staff : . drwxr-xr-x+ macname ...

  9. pojo、po、dto、dao、bo区别

    j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维.     POJO(plain old java object):普通的java对象,有别于特殊的j ...

  10. 十一、FHS基础原理

      文件系统: http://note.youdao.com/noteshare?id=298f02714da5b9483429a40dda667f35&sub=6120396419BA477 ...