JDK1.8 Optional 源码剖析

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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值