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. [hdoj4578][多延迟标记的线段树]

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  2. 页面的beforeunload和unload的事件应用

    博主最近遇到一个需求,需要在用户离开之前给一个提示,是否确认离开,并且用户确认离开的话,需要发出一个请求 下面直接上代码: <!DOCTYPE HTML> <html> < ...

  3. redis之持久化RDB与AOF

    redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...

  4. About Xi’an

    Introduction Ancient Capital It is the birthplace of the Chinese Nation, is one of the four ancient ...

  5. Sublime Text 编译运行Kotlin

    Sublime Text 编译运行Kotlin 转 https://blog.csdn.net/pirate7777777/article/details/72655293 kotlin最近是火了,所 ...

  6. 微信自定义分享 IOS端分享失败

    1.在IOS微信浏览器中自定义分享link 链接中的中文需要encodeURIComponent() 编码(安卓会自动编码) 2.另外在IOS微信浏览器中自定义分享 imgUrl  不能大于34KB ...

  7. springboot和hadoop2.7.7集成开发

    1.本人在腾讯云安装hadoop2.7.7,详细安装请看以前的博客 2.pom.xml文件 <?xml version="1.0" encoding="UTF-8& ...

  8. VMware安装Centos7超详细过程

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

  9. uni-app 使用 iconfont 图标 自定义图标

    uni-app 的uni-ui 的 Icon 图标组件,裡面的图标只是移动端常见的图标,对于一些其他需求所要显示的图标,这个是完全不够用.那么怎么办?模仿它的组件,用阿里巴巴图标矢量库的图标,自己定义 ...

  10. 在DELPHI中用TreeView控件从数据库中动态装载信息

    1.PInfo表结构ID VARCHAR(50)FullName VARCHAR(50)ParentID VARCHAR(50) 2.Unit文件unit Info; interface uses  ...