我有一个通过EJB调用外部API的代码,并且该API偶尔会泄漏不属于客户端工具包的异常,因此导致ClassNotFoundException
。
我有一个围绕呼叫的try-catch块:
try {
thirdPartyLibrary.finalInvokeMethod();
} catch (SomeException exception) {
//Do something
} catch(
..
} catch (Exception exception) {
if (exception instanceof ClassNotFoundException) {
log.error("....");
}
}
我想避免在catch中使用instanceof,但是如果我为ClassNotFoundException
添加一个单独的catch子句,编译器会产生一个错误“Unreachable catch block”,因为thirdPartyLibrary.finalInvokeMethod();
没有抛出{{ 1}}。
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
我找到了解决方法。我将thirdPartyLibrary.finalInvokeMethod();
包装在另一个抛出已检查异常的方法中。所以我得到了一个没有编译器错误的专用catch子句。
private someMethod() {
try {
callExternalAPI();
} catch (SomeException exception) {
//Do something
} catch(
..
} catch (ClassNotFoundException exception) {
log.error("....");
//Do something
} catch (Exception exception) {
//Do something
}
}
private void callExternalAPI() throws ClassNotFoundException {
thirdPartyLibrary.finalInvokeMethod();
}