orElseThrow()抛出的异常必须是空指针异常类或者空指针异常的子类吗?可以是自定义的类吗?如果我先使用Optional.ofNullable()规避了空指针异常后,我在orElseThrow()传入的参数是其他的异常, 可以吗
时间: 2024-04-15 17:27:19 浏览: 58
`orElseThrow()` 方法的参数可以是任何类型的异常,不限于空指针异常类或其子类。你完全可以传入自定义的异常类作为参数。
`orElseThrow()` 方法接受一个 `Supplier` 函数接口作为参数,用于在需要时创建并抛出异常。`Supplier` 函数接口表示一个供应商,它不接受任何参数,返回一个结果。在这种情况下,它用于提供异常对象。
以下是一个示例代码,演示了如何在 `orElseThrow()` 方法中使用自定义异常类:
```java
import java.util.Optional;
public class Example {
public static void main(String[] args) {
String value = null;
try {
String result = Optional.ofNullable(value)
.orElseThrow(() -> new MyCustomException("Value cannot be null"));
System.out.println(result);
} catch (MyCustomException e) {
System.out.println("Caught exception: " + e.getMessage());
}
}
}
class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
```
在上述代码中,我们创建了一个空值的字符串 `value`。然后,我们使用 `Optional.ofNullable(value)` 将其封装到一个 `Optional` 对象中。
接着,我们在 `orElseThrow()` 方法中使用 `Supplier` lambda 表达式创建并抛出一个自定义异常类 `MyCustomException` 的实例。
如果 `value` 为空,则会抛出 `MyCustomException` 异常,并在 catch 块中捕获该异常并输出相应的消息。
所以,你可以在 `orElseThrow()` 方法中传入任何类型的异常类,包括自定义的异常类,以满足你的需求。
阅读全文