我使用“盲目”重新抛出检查异常。我已经使用它来通过 Streams API,在该 API 中我不能使用抛出检查异常的 lambda。例如,我们有 ThrowingXxxxx 功能接口,因此可以通过检查的异常。
这使我可以自然地在调用者中捕获已检查的异常,而无需知道被调用者必须通过不允许已检查异常的接口将其传递。
try {
// some code that can throw both checked and runtime exception
} catch (Exception e) {
throw rethrow(e);
}
在调用方法中,我可以再次声明检查的异常。
public void loadFile(String file) throws IOException {
// call method with rethrow
}
/**
* Cast a CheckedException as an unchecked one.
*
* @param throwable to cast
* @param <T> the type of the Throwable
* @return this method will never return a Throwable instance, it will just throw it.
* @throws T the throwable as an unchecked throwable
*/
@SuppressWarnings("unchecked")
public static <T extends Throwable> RuntimeException rethrow(Throwable throwable) throws T {
throw (T) throwable; // rely on vacuous cast
}
处理异常有很多不同的选项。我们使用其中的一些。
https://vanilla-java.github.io/2016/06/21/Reviewing-Exception-Handling.html