Java 8 的 Optional 类抛异常

Java 8 的 Optional 类抛异常

本文我们介绍当Optional类为空时如何抛自定义异常。

Optional.orElseThrow

简单描述,如果Optional值存在,则isPresent方法返回true,然后调用get方法返回该值。否则抛出NoSuchElementException异常。

orElseThrow(Supplier

示例实战

假设我们有一个方法返回可能为空的结果:

public String findNameById(String id) {
    return id == null ? null : "example-name";
}

现在我们打算两次调用findNameById(String id) 方法,并通过ofNullable(T value)方法包装结果。
Optional 提供了静态工厂方法ofNullable(T value)创建实例,然后我们在调用 orElseThrow方法。

通过测试验证结果:

@Test
public void whenIdIsNull_thenExceptionIsThrown() {
    assertThrows(InvalidArgumentException.class, () -> Optional
      .ofNullable(personRepository.findNameById(null))
      .orElseThrow(InvalidArgumentException::new));
}

上述代码findNameById返回null. 所以orElseThrow方法抛出 InvalidArgumentException 异常。

下面使用非空参数调用该方法,则不会获得InvalidArgumentException 异常。

@Test
public void whenIdIsNonNull_thenNoExceptionIsThrown() {
    assertAll(() -> Optional
      .ofNullable(personRepository.findNameById("id"))
      .orElseThrow(RuntimeException::new));
}

总结

本文我们介绍了 Java 8 Optional 如何抛自定义异常。

你可能感兴趣的:(java8~9核心功能)