Java8新特性--Optional初探

本文详细介绍了Java8中的Optional类,它用于更优雅地处理NullPointerException。文章探讨了Optional的构造方法、of()、ofNullable()方法以及get()和isPresent()等关键方法的使用,旨在帮助读者理解如何避免空指针异常并提升代码的健壮性。
摘要由CSDN通过智能技术生成

        最近运气好,技术栈正好和项目组相同,靠着坚挺的人品拿着组里面最低一级工资进了一家大公司。大公司项目就是比以前待过小公司先进和规范。用了大量的java8新特性还有一套完整的架构。刚进来一周开始熟悉项目,大量没有用过的类和注解就整的我头有点痛,只有从零开始一点点的把这些东西都整理好了。

Optional类是从java8开始使用的一个新类,在我看来是为了优雅的处理NPE异常。

他和单例模式中的饿汉模式很想。他在我们想要的对象外面套了一层壳,我们的对象实际上是放在

private final T value;

这个里面的value字段中的

一.他将无参构造方法私有化,不允许我们直接调用无参构造方法创建一个空的Optional对象,如果想要一个Value字段值为空的Optional对象,他提供了empty()方法

私有化的构造方法

private Optional() {
    this.value = null;
}

返回的是一个value字段为空的Optional对象

public static<T> Optional<T> empty() {
    @SuppressWarnings("unchecked")
    Optional<T> t = (Optional<T>) EMPTY;
    return t;
}

二. 私有化其有参构造方法不允许直接创建,然后利用Object类的requireNonNull方法不允许传入的参数为null,

private Optional(T value) {
    this.value = Objects.requireNonNull(value);
}

他的有参构造方法也是把值放进了value字段中。由于requireNonNull方法导致当传入的参数为null时会直接抛出NPE异常

同无参构造方法一样,我们也不能通过有参构造方法直接new出一个Optional对象

2.1.通过of()方法或ofNullable()方法返回一个Optioal对象

public static <T> Optional<T> of(T value) {
    return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}

一眼可以看出ofNullable方法是通过调用of方法创建的Optional对象,区别在于of方法是直接调用的有参构造,当传入值为null是就抛出NPE异常,ofNullable方法当传入值为null时会调用empty方法创建一个value字段值为null的Optional对象

三.自带的get方法返回的也是value字段的值,如果value字段值为空那么抛出异常

public T get() {
    if (value == null) {
        throw new NoSuchElementException("No value present");
    }
    return value;
}

3.1还另外提供了一个isPresent方法判断value的值是否为空

public boolean isPresent() {
    return value != null;
}

Optional剩下的方法就涉及到java8的其他新特性了,比如通过函数式接口Consumer的函数式编程,这方面我实际上也没用过,只看过别人写的demo,了解的感觉不够深入,欢迎有大神给链接让我学习下,我也会尽快学习更多的知识完成Optional类剩下方法的分析。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值