try catch怎么和orElseThrow()一起用
时间: 2024-10-09 15:01:39 浏览: 12
在Java 8及以上版本中,`Optional<T>` 类提供了一个 `orElseThrow()` 方法,用于处理 `Optional` 对象是否包含值的情况。如果 `Optional` 非空(即有值),则返回该值;如果 `Optional` 为空(即没有值),则会抛出指定的异常。结合 `try-catch` 可以优雅地处理可能出现的 `Optional` 空值情况。
举个例子,假设你有一个 `Optional<User>`,并且你想从其中获取用户名:
```java
import java.util.Optional;
public class User {
private String name;
// getters and setters...
}
public void printUserNameFromOptional(User user) {
Optional<User> optionalUser = findUserById(123); // 这里可能会返回null
try {
User userFromOptional = optionalUser.orElseThrow(() -> new NoSuchElementException("User not found"));
System.out.println("Name: " + userFromOptional.getName());
} catch (NoSuchElementException e) {
System.err.println(e.getMessage());
}
}
```
在这个例子中,`findUserById()` 可能返回 `Optional.empty()` 如果用户未找到。`orElseThrow()` 将自动抛出 `NoSuchElementException` 并附带自定义的消息。如果 `optionalUser` 有值,则不会进入 `catch` 块。
阅读全文