美文网首页
Java8 Optional

Java8 Optional

作者: 聪明的奇瑞 | 来源:发表于2018-01-23 14:05 被阅读38次

    Optional 类是一个可以为 null 的容器对象,平常我们通过调用一个方法得到了返回值事需要判断返回值是否为 null,只有非空情况下才会将其传入给其它方法,Optional 能避免源码被各种 null 检查污染,开发出更简洁的代码

    相关方法

    of

    • 为非 null 值创建一个 Optional,创建对象时参数不能为 null,否则会抛出 NullPointerException 异常
    //调用工厂方法创建Optional实例
    Optional<String> name = Optional.of("Sanaulla");
    
    //传入参数为null,抛出NullPointerException.
    Optional<String> someNull = Optional.of(null);
    

    of Nullable

    • 与 of 方法不同的是可以接受 null 值情况
    //下面创建了一个不包含任何值的Optional实例
    //例如,值为'null'
    Optional empty = Optional.ofNullable(null);
    

    isPresent

    • 如果值存在返回 true,否则 false
    //isPresent方法用来检查Optional实例中是否包含值
    if(name.isPresent()) {
      //在Optional实例内调用get()返回已存在的值
      System.out.println(name.get());
      //输出Sanaulla
    }
    

    get 方法

    • 如果有值则返回,否则出 NoSuchElementException
    //执行下面的代码会输出:No value present
    try{
    //在空的Optional实例上调用get(),抛出NoSuchElementException
    System.out.println(empty.get());
    }
    catch(NoSuchElementException ex) {
    System.out.println(ex.getMessage());
    }
    

    ifPresent

    • 如果 Optional 实例有值则为其调用 consumer,否则不做处理,Comsumer 包含一个抽象方法,该方法传入对值进行处理,没有返回值
    //ifPresent方法接受lambda表达式作为参数。
    //lambda表达式对Optional的值调用consumer进行处理。
    name.ifPresent((value) -> {
    System.out.println(
    "The length of the value is: "
    + value.length());
    });
    

    orElse

    • 如果有值则返回,否则返回其它值
    //如果值不为null,orElse方法返回Optional实例的值。
    //如果为null,返回传入的消息。
    //输出:There is no value present!
    System.out.println(empty.orElse("There is no value present!"));
    //输出:Sanaulla
    System.out.println(name.orElse("There is some value!"));
    

    orElseGet

    • 与 orElse 类似,区别在于得到的默认值,orElse 传入字符串作为默认值,orElseGet 可以通过接收 Supplier 接口实现用来生成默认值
    //orElseGet与orElse方法类似,区别在于orElse传入的是默认值,
    
    //orElseGet可以接受一个lambda表达式生成默认值。
    
    //输出:Default Value
    System.out.println(empty.orElseGet(() ->"Default Value"));
    
    //输出:Sanaulla
    System.out.println(name.orElseGet(() ->"Default Value"));
    

    orElseThrow

    • 如果有值将其返回,否则抛出 supplier 接口创建的异常
    try{
      //orElseThrow与orElse方法类似。与返回默认值不同,
      //orElseThrow会抛出lambda表达式或方法生成的异常
      empty.orElseThrow(ValueAbsentException::new);
    }
    catch(Throwable ex) {
      //输出: No value present in the Optional instance
      System.out.println(ex.getMessage());
    }
    

    相关文章

      网友评论

          本文标题:Java8 Optional

          本文链接:https://www.haomeiwen.com/subject/zqssaxtx.html