Java 8 Optional

本文最后更新于 2024年4月15日 下午

Introduction

Optional 类是 Java 8 引入的一个容器类,用于解决可能存在空值的情况。它提供了一种优雅的方式来处理可能为空的对象,避免了空指针异常。

Commonly Used Methods

  • of(T value):创建一个包含非空对象的 Optional 实例。
  • ofNullable(T value):创建一个可能为空的 Optional 实例。
  • isPresent():检查 Optional 实例中是否包含非空对象。
  • get():如果有值则返回,否则抛出 NoSuchElementException 异常。
  • ifPresent(Consumer<? super T> consumer):如果 Optional 实例中包含非空对象,则执行指定的操作。
  • orElse(T other):如果 Optional 实例中包含非空对象,则返回该对象,否则返回指定的默认值。
  • orElseGet(Supplier<? extends T> other):如果 Optional 实例中包含非空对象,则返回该对象,否则通过指定的供应商函数获取默认值。
  • orElseThrow(Supplier<? extends X> exceptionSupplier):如果 Optional 实例中包含非空对象,则返回该对象,否则抛出指定的异常。
  • empty():创建空的 Optional 对象。

In practice

1
2
3
4
5
6
7
8
9
10
11
12
13
// 创建一个值非 null 的 Optional 对象
Optional<String> stein = Optional.of("stein");
// 创建一个值为 null 的Optional 对象
Optional<String> nullable = Optional.ofNullable(null); // ofNullable 实际调用 empty() 静态方法 创建空的 Optional 对象:return value == null ? empty() : of(value);
// 如果 stein 容器的值不为空则输出值
stein.ifPresent(System.out::println);
// 如果 nullable 容器不为空则输出值
nullable.ifPresent(System.out::println);
// 如果 Optional 实例中包含非空对象,返回值,否则返回指定的默认值
String defaultName = nullable.orElse("default");
System.out.println("defaultName = " + defaultName);
// 传给 orElseGet() 一个 Supplier 函数式接口的 lambda 表达式实现
String defaultName = nullable.orElseGet(() -> "defaultName");

Java 8 Optional
https://stein283036.github.io/2024/04/15/Java-8-Optional/
作者
倪京龙
发布于
2024年4月15日
更新于
2024年4月15日
许可协议