我在代码中遇到异常,我想捕获内部异常。有可能赶上吗?
java.lang.RuntimeException: error
some stack trace
some stack trace
some stack trace
! Caused by: java.util.concurrent.TimeoutException: null
some stack trace
some stack trace
some stack trace
假设我有以下代码。
function abc() {
try{
xyz()
} catch (TimeoutException e) {
do stuff
}
}
xyz()函数正在生成该异常。像这样的工作会捕获TimeoutException吗?
答案 0 :(得分:3)
你不能直接这样做。您必须捕获外部异常,检查其getCause()
以查看它是否是您想要的,然后处理该原因或重新抛出顶级异常。
(你也可以从技术上重新抛出内部的那个,但我强烈反对这一点;堆栈跟踪会非常混乱,并且调试起来会更难 - 尤其是从现在开始的一年,当你'我忘记了你那样做了。)
答案 1 :(得分:1)
不,您无法使用RuntimeException
抓住catch(TimeoutException e)
。
但是,你可以做到
} catch (RuntimeException e) {
Throwable cause = e.getCause();
}
得到原因。
答案 2 :(得分:1)
您无法直接抓住由RuntimeException
引起的TimeoutException
。
但你实现这样:
try {
xyz();
} catch (RuntimeException e) {
if (e.getCause() instanceof TimeoutException) {
// handle TimeoutException
doStuff();
} else {
// rethrow all exceptions with other causes
throw e;
}
}