Skip to main content
 首页 » 编程设计

Java 的 Optional 类抛异常

2022年07月19日163grandyang

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
阅读延展