JDK1.8 Optional 源码剖析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32573251/article/details/82824534

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();
    }

}

猜你喜欢

转载自blog.csdn.net/qq_32573251/article/details/82824534