欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Optional 部分源码

程序员文章站 2022-06-07 13:13:08
...

没有包含和几个函数式接口相关的方法

package com.copy;

import java.util.NoSuchElementException;
import java.util.Objects;

/**
 * Created by syd on 2019/6/13.
 */
public final class OptionalCopy<T> {

    private static final OptionalCopy<?> EMPTY = new OptionalCopy <>();

    private final T value;

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

    /**
     * ① 创建一个空的Optional对象
     */
    public static <T> OptionalCopy<T> empty() {
        OptionalCopy<T> tOptionalCopy = (OptionalCopy<T>) EMPTY;
        return tOptionalCopy;
    }

    private OptionalCopy(T value) {
        // value == null 空指针异常
        this.value = Objects.requireNonNull(value);
    }

    /**
     * ② 创建一个value不为null的Optional对象
     */
    public static <T> OptionalCopy<T> of(T value) {
        return new OptionalCopy <>(value);
    }

    /**
     * ③ value 不确定是否为null
     * ofNullable = of + empty
     */
    public static <T> OptionalCopy<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }

    /**
     * 获取value对象,为null抛出 NoSuchElementException
     */
    public T get() {
        if (value == null) {
            throw new NoSuchElementException("no value present");
        }
        return value;
    }

    /**
     * 判断 value 是否为 null
     */
    public boolean isPresent() {
        return value != null;
    }

    /**
     * value != null 返回 value, 否则返回 other 
     */
    public T orElse(T other) {
        return value != null ? value : other;
    }
    
}
相关标签: java