Java8新特性 - Optional

书籍《Java实战第二版》

1. 为什么Optional取代null?

  1. 令人厌烦的NullPointerException异常
  2. 每为方法做一次null检查就会增加一个退出语句
  3. 每为方法做一次null检查就可能会造成多层嵌套,引起代码膨胀
  4. null无意义,null并不属于任何类型,这意味着它可以被赋值给任意引用类型的变量。

2. Java8引入的Optional<\T>

如何使用Optional代替null?
如果变量存在时,Optional类只是对类简单封装。变量不存在时,缺失的值会被建模成一个“空”的Optional对象,由方法Optional.empty()返回。

Optional.empty()方法是一个静态工厂方法,它返回Optional类的特定单一实例。

如果你尝试解引用一个null,那么一定会触发NullPointerException,不过使用Optional.empty()就完全没事儿,它是Optional类的一个有效对象,多种场景都能调用,非常有用。
类似以下的一种包装的形式。
在这里插入图片描述

3. 使用方法

3.1 声明一个空的Optional

通过Optional的静态工厂方法:

   public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
   		//声明一个空的Optional
        Optional<A> optA = Optional.empty();

3.2 依据值创建一个Optional

   		//依据值创建一个Optional
        A a = new A();
        //如果a是null,那么立即就会抛出一个空指针异常
        Optional<A> optionalA = Optional.of(a);

3.3 可接受空指针的Optional

        //可接受空指针的Optional
        Optional<A> optional = Optional.ofNullable(a);

3.4 其他api

在这里插入图片描述
get()是这些方法中最简单但又最不安全的方法。如果变量存在,那它直接返回封装的变量值,否则就抛出一个NoSuchElementException异常。所以,除非你非常确定Optional变量一定包含值,否则使用这个方法是个相当糟糕的主意。

4. 关键概念

  1. null引用在历史上被引入到程序设计语言中,目的是为了表示变量值的缺失。
  2. Java 8中引入了一个新的类java.util.Optional,对存在或缺失的变量值进行建模。
  3. 你可以使用静态工厂方法Optional.empty、Optional.of以及Optional.ofNullable创建Optional对象。
  4. Optional类支持多种方法,比如map、flatMap、filter,它们在概念上与Stream类中对应的方法十分相似。
  5. 使用Optional会迫使你更积极地解引用Optional对象,以应对变量值缺失的问题,最终,你能更有效地防止代码中出现不期而至的空指针异常。
  6. 使用Optional能帮助你设计更好的API,用户只需要阅读方法签名,就能了解该方法是否接受一个Optional类型的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值