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

JDK1.8 Optional 源码剖析

程序员文章站 2021-12-25 10:56:38
...

Optional

容器对象,可能包含也可能不包含非null值。如果存在值,{@ code isPresent()}将返回{@code true}并且{@code get()}将返回该值。
提供依赖于是否存在包含值的其他方法,例如{@link #orElse(java.lang.Object)orElse()}(如果值不存在则返回默认值)和{@link #ifPresent (java.util.function.Consumer)ifPresent()}(如果值存在则执行代码块)。

of

返回具有指定的当前非空值的{@code Optional}。

public static <T> Optional<T> of(T value) {
    return new Optional<>(value);
}

私有的构造函数
private Optional(T value) {
    this.value = Objects.requireNonNull(value);
}
 
Objects. requireNonNull 如果为空则会报空指针   
public static <T> T requireNonNull(T obj) {
    if (obj == null)
        throw new NullPointerException();
    return obj;
}

ofNullAble

返回描述指定值的{@code Optional},如果为非null,否则返回空{@code Optional}。

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

orElse

如果值存在则返回,否则则返回other

public T orElse(T other) {
        return value != null ? value : other;
}

eg:

public class OptionTest {
    public static void main(String[] args) {
        String userId = null;
        //String userName = getUserName(null);
        //System.out.println(userName);
        String userAge = getUserAge(userId);
        System.out.println(userAge);
    }


    public static String getUserName(String userId){
        return Optional.ofNullable(userId).orElse("zhuxiaolei");
    }
    public static String getUserAge(String userId){
        return Optional.of(userId).get();
    }

}
相关标签: JDK1.8