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 博客

最新文章

  1. 你的USB设备还安全吗?USB的安全性已从根本上被打破!
  2. ReStart
  3. java 面向对象
  4. How to remove a batch of VMs and related Disks
  5. merge布局
  6. Linux 的cp命令
  7. 二模 (8) day2
  8. android中ImageView讲解
  9. Python-memcached的基本使用
  10. memcache和memcahced区别
  11. (转)高性能I/O模型
  12. android 网络交互
  13. POJ1274 The Perfect Stall【二部图最大匹配】
  14. Visual Studio测试工具TestDriven.NET2.2
  15. vue-router2.0动态路由获取参数
  16. 20170505 PHP实践中知识点
  17. Jmeter中基本操作
  18. mysql特殊查询----分组后排序
  19. windows 2008下IIS7 安装ASP.NET 遇到500.19
  20. codeforces749B

热门文章

  1. sort multiple-level dict
  2. SVN安装与汉化
  3. 019-020_STM32程序移植之_W5500连接noenet
  4. How to change the default browser in Visual Studio
  5. SpingMVC入门
  6. docker 1.12
  7. php安装扩展的地址
  8. Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium
  9. 使用setUncaughtExceptionHandler在线程外面捕获异常
  10. How do negative margins in CSS work and why is (margin-top:-5 != margin-bottom:5)?