java8新特性从入门到应用 第四章 空指针的终结者 java.util.Optional<T>

引言

如果问 java coder 编程中见到最多的异常是什么 百分之九十九的程序猿会回答空指针:java.lang.NullPointerException
根据异常排行榜信息 详细请点击
而空指针异常出现频次竟高出第二名两倍,由此可以断言 只有程序解决了空指针异常那么程序异常崩溃的概率将减少一半。
java8 在工具栏上给我们提供个利器 java.util.Optional<T>

java.util.Optional

其实 java.util.Optional 解决空指针并没有什么神奇之处,只是普通封装的一个工具类 ,并让工具类支持了一下lambda 表达式 将外部判空的操作移动到内部去了
ifPresent 方法进行举例 源码如下:

    /**
     * If a value is present, invoke the specified consumer with the value,
     * otherwise do nothing.
     *
     * @param consumer block to be executed if a value is present
     * @throws NullPointerException if value is present and {@code consumer} is
     * null
     */
    public void ifPresent(Consumer<? super T> consumer) {
        if (value != null)
            consumer.accept(value);
    }

其实这与我们自己封装的工具类并无二至,下面介绍一下使用

创建

Optional<T> 类将构造函数进行了私有化 故只能通过3个静态方法创建实例

  1. Optional.empty() 此方法将创建一个空的 Optional<T>
  2. Optional.of(value) 此方法将创建一个泛型为 valueOptional<T> 其中value为不可 为null 的如果为null则会抛出 空指针异常
  3. Optional.ofNullable(value) 当不确定 value 是否为 null 时调用 不会抛出异常
api使用简介

由于返回值在java之后的版本并不兼容 所以这里就不贴返回值了,可以自己进行调用后点进去看返回值,这个类整体都很易懂一看就清楚了

方法参数作用
get获取被包装的对象 如果对象为 null 则抛出 new NoSuchElementException("No value present")异常
isPresent根据返回 boolean 类型判断是否为null
ifPresentConsumer<? super T>如果参数不为null则执行传入的方法
filterPredicate<? super T>如果传入的方法返回false则返回空的Optional<T>否则返回自身
mapFunction<? super T, ? extends U>根据传入的方法将当前值转换成其他值并用Optional<T>进行包装
flatMapFunction<? super T, Optional>map 仅仅是传入方法的返回值不同
orElseT传入一个与其泛型相同的参数,如果Optional<T>内包装对象为null则返回传入对象 否则返回被包装对象
orElseGetSupplier<? extends T>含义与orElse相同 不同支出在于orElse传入的是创建好的对象 而此时传入创建过程
orElseThrowSupplier<? extends X> exceptionSupplier传入构建一个异常方法,如果被包装对象为null 则抛出此异常
继承的方法

Optional<T> 继承重新了 equalshashCode 使其直接调用被包装者本身的 equalshashCode 进行比较操作,重写了 toString 方法在其输出外包装了一次 Optional[%s] 的形式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值