跳转至

Java8 Optional 容器类

用于尽量避免空指针异常。

1. 静态方法

方法名 描述
static Optional empty() 返回空的 Optional 实例
static Optional of(T value) 返回具有指定非空值的 Optional,如果为空则发生异常
static Optional ofNullable(T value) 返回指定值的 Optional,如果为 null 则返回空 Optional,不会发生异常

2. 实例方法

2.1 获取值的方法

方法 描述
get() 返回包含的值,如果为空则抛出异常
orElse(T other) 返回包含的值,如果为空则返回指定的默认值
orElseGet(Supplier supplier) 返回包含的值,如果为空则返回 supplier 生成的值
orElseThrow(Supplier exceptionSupplier) 返回包含的值,如果为空则抛出 supplier 生成的异常

2.2 判断方法

方法 描述
isPresent() 返回值是否存在
ifPresent(Consumer consumer) 如果值存在则执行 consumer

2.3 转换方法

方法 描述
map(Function mapper) 如果值存在则进行转换
flatMap(Function mapper) 如果值存在则进行转换,返回值为 Optional

3. 示例代码

// of 获取一个非 null 的对象,如果为 null 则发生异常
Optional<Employee> employee = Optional.of(new Employee());
System.out.println(employee);

// empty 获取一个空的 Optional
Optional<Employee> empty = Optional.empty();
System.out.println(empty);

// ofNullable 允许获取一个 null 对象,不会发生异常
Optional<Employee> employee1 = Optional.ofNullable(new Employee());
Optional<Employee> employee2 = Optional.ofNullable(null);
System.out.println(employee1);
System.out.println(employee2);

// orElse 使用默认值
String name = Optional.ofNullable(user)
    .map(User::getName)
    .orElse("匿名用户");

// ifPresent 如果存在则执行
Optional.ofNullable(email)
    .ifPresent(e -> System.out.println("发送邮件到: " + e));