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

Java8 Optional

程序员文章站 2022-03-04 10:51:44
...

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