什么是Optional类?如何使用它?代码举例讲解

Optional 类是 Java 8 新增的一个工具类,它是一种容器对象,代表一个值存在或不存在。它设计用来防止 NullPointerException,更优雅地表达值的缺失。

在 Java 8 之前,我们通常会返回 null 表示一个值的缺失,但是这会导致 NullPointerException。Optional 类就完美解决了这个问题。

Optional 类有以下几个方法:

  • Optional.empty():创建一个空的 Optional 实例。
  • Optional.of(value):创建一个包含 value 的 Optional 实例。
  • Optional.ofNullable(value):如果 value 是 null,则返回一个空的 Optional,否则返回一个包含 value 的 Optional。
  • isPresent():如果 Optional 包含一个值,则返回 true。
  • get():如果 Optional 包含一个值,则返回该值,否则抛出 NoSuchElementException。
  • orElse(other):如果 Optional 包含一个值,则返回该值,否则返回 other。
  • orElseGet(other):如果 Optional 包含一个值,则返回该值,否则返回 other() 的结果。
  • orElseThrow(supplier):如果 Optional 包含一个值,则返回该值,否则抛出由 supplier 函数生成的异常。
  • ifPresent(consumer):如果 Optional 包含一个值,则使用该值调用 consumer 函数。

我们来看一些示例:

Optional<String> optional = Optional.of("Hello");
optional.isPresent(); // true
optional.get();      // Hello

可选值存在时:

Optional<String> optional = Optional.empty();
optional.isPresent(); // false
optional.orElse("Default"); // Default
optional.orElseGet(() -> "Default"); // Default 

可选值不存在时,返回默认值:

Optional<String> optional = Optional.of("Hello");
optional.ifPresent(s -> System.out.println(s.length()));   // 5 

如果存在值则进行处理:

Optional<String> optional = Optional.empty();  
optional.orElseThrow(NoSuchElementException::new); // NoSuchElementException