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 如何抛自定义异常。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/82715987