04-Optional类和接口中的default、static方法

本文介绍了Java8的Optional类,包括API、源码解析和简单使用示例。同时,详细讲解了接口中的default和static方法,包括它们的原理、使用场景及项目实战,并给出了代码示例和实际运行结果。通过这些内容,帮助读者理解如何利用Optional避免空指针异常,以及如何利用default和static方法增强接口的功能。
摘要由CSDN通过智能技术生成

这篇文章,介绍Jave8的 Optional 类和接口的 default、static 方法。

1、Optional类

Optional:Java8 java.util包中提供的一个可以包含或者不包含非null值的容器对象。
通过 Optional 我们不用显式进行空值检测 ( if( T == null ) )也很好的解决空指针异常

1.1 Optional API

Optional 方法 说明
static Optional empty() 返回一个空Optional(值为null)
boolean equals(Object obj) 指示给定的对象是否 equals 此Optional的value
Optional filter(Predicate<? super predicate) 如果 Optional 的值存在而且匹配给定的 predicate(断定型函数式接口),返回当前Optional,否则返回一个空Optional(值为null)
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果 Optional 的值存在,应用提供的映射方法并返回结果 Optional,否则返回一个空的Optional
T get() 如果此 Optional 存在值,则返回值,否则抛出NoSuchElementException
int hashCode() 返回当前值的哈希码值(如果有),如果没有值,则返回0。
void ifPresent(Consumer<? super T> consumer) 如果存在值,对该值应用指定的 Consumer(消费型函数式接口),否则不执行任何操作。
boolean isPresent() 如果存在值,返回true,否则返回false
<U>Optional<U> map(Function<? super T,? extends U> mapper) 如果值存在,对该值应用给定的映射方法,如果是非null的结果,返回一个描述该值的 optional,否则返回一个空Optional(值为null)
static Optional of(T value) 通过给定的value,返回一个值为给定value的Optional实例,value不能为null,若value为null,则抛出NullPointerException
static Optional ofNullable(T value) 通过给定的value,返回一个值为给定value的Optional实例,value可为null
T orElse(T other) 如果此Optional的value不为null,则返回value,否则返回给定的other对象
T orElseGet(Supplier<? extends T> other) 如果此Optional的value不为null,则返回value,否则通过调用给定的Supplier(供给型函数式接口)返回一个T类型的对象
T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果此Optional的value不为null,则返回value,否则通过调用给定的Supplier创建一个Throwable
String toString() 返回非空字符串表示此Optional,适用于调试。

项目中常用的实例方法,用于解决空指针异常

  • isPresent()方法,如果存在值,将返回true,否则返回false。

  • orElse(T other)方法,如果存在值,则返回当前Optional的value,否则返回 other

  • ifPresent(Consumer<? super T> consumer),如果存在值,对该值应用指定的 Consumer,执行代码块,否则不做任何操作

1.2 Optional 源码

public final class Optional<T> {
    /**
     *  empty()方法的公共实例
     */
    private static final Optional<?> EMPTY = new Optional<>();

    /**
     * Optional的值,类型为T
     */
    private final T value;

    /**
     * 私有构造器
     */
    private Optional() {
        this.value = null;
    }

    /**
     * 返回一个空Optional(值为null)
     */
    public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }

    /**
     * value为入参的构造器,value不能为null,若value为null,则抛出NullPointerException
     */
    private Optional(T value) {
        this.value = Objects.requireNonNull(value);
    }

    /**
     * 通过给定的value,返回一个值为给定value的Optional实例,value不能为null,若value为null,则抛出NullPointerException
     */
    public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

    /**
     * 通过给定的value,返回一个值为给定value的Optional实例,value可为null,若value为null,则返回 EMPTY
     */
    public static <T> Optional<T> ofNullable(T value) {
        return value == nu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值