• 新版网站前后台即将上线,2019年将致力于提高文章质量,加大原创力度,打造一个更加舒适的阅读体验!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 新版网站前后台即将上线,2019年将致力于提高文章质量,加大原创力度,打造一个更加舒适的阅读体验!
  • 如果有任何体验不佳的地方,欢迎向客服反馈!

JDK8新特性之Optional


Optional 是什么

java.util.Optional
Jdk8 提供 Optional,一个可以包含 null 值的容器对象,可以用来代替 xx != null 的判断。

Optional 常用方法

of

  1. publicstatic<T>Optional<T> of(T value){
  2.    returnnewOptional<>(value);
  3. }
为 value 创建一个 Optional 对象,如果 value 为空则 会报出 NullPointerException 异常。

ofNullable

  1. publicstatic<T>Optional<T> ofNullable(T value){
  2.    return value ==null? empty(): of(value);
  3. }
为 value 创建一个 Optional 对象,但可以允许 value 为 null 值。

isPresent

  1. publicboolean isPresent(){
  2.    return value !=null;
  3. }
判断当前 value 是否为 null,如果不为 null 则返回 true,否则 false。

ifPresent

如果不为 null 值就执行函数式接口的内容。
  1. publicvoid ifPresent(Consumer<?super T> consumer){
  2.    if(value !=null)
  3.        consumer.accept(value);
  4. }

get

  1. public T get(){
  2.    if(value ==null){
  3.        thrownewNoSuchElementException("No value present");
  4.    }
  5.    return value;
  6. }
返回当前的值,如果为空则报异常。

orElse

返回当前值,如果为 null 则返回 other。
  1. public T orElse(T other){
  2.    return value !=null? value : other;
  3. }

orElseGet

orElseGet 和 orElse 类似,只是 orElseGet 支持函数式接口来生成 other 值。
  1. public T orElseGet(Supplier<?extends T> other){
  2.    return value !=null? value : other.get();
  3. }

orElseThrow

如果有值则返回,没有则用函数式接口抛出生成的异常。
  1. public<X extendsThrowable> T orElseThrow(Supplier<?extends X> exceptionSupplier)throws X {
  2.    if(value !=null){
  3.        return value;
  4.    }else{
  5.        throw exceptionSupplier.get();
  6.    }
  7. }

示例

  1. publicstaticvoid main(String[] args){
  2.    testOf();
  3.    testNullable();
  4. }
  5. privatestaticvoid testNullable(){
  6.    User user =null;
  7.    User john =newUser("john",18);
  8.    User dick =newUser("dick",12);
  9.    System.out.println(Optional.ofNullable(user).orElse(john));
  10.    System.out.println(Optional.ofNullable(john).get());
  11.    System.out.println(Optional.ofNullable(dick).orElse(john));
  12.    System.out.println(Optional.ofNullable(user).orElseGet(()-> john));
  13.    System.out.println();
  14. }
  15. privatestaticvoid testOf(){
  16.    try{
  17.        User user1 =newUser();
  18.        Optional<User> userOptional1 =Optional.of(user1);
  19.        if(userOptional1.isPresent()){
  20.            System.out.println("user is not null");
  21.        }
  22.        User user2 =null;
  23.        Optional<User> userOptional2 =Optional.of(user2);//NullPointerException
  24.        if(userOptional2.isPresent()){
  25.            System.out.println("user is not null");
  26.        }
  27.    }catch(Exception e){
  28.        e.printStackTrace();
  29.    }
  30.    System.out.println();
  31. }
Optional在 jdk8 中有大量使用,比如像 Stream 流中,但 Optional用在 null 判断感觉也没什么鸟用。。
在 Spring4 中也可以用 Optional 来代替 autowired(require=false)的情况,参考历史 Spring 系列文章。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:JDK8 新特性之 Optional
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00