捕获非抛出的已检查异常

时间:2015-10-21 09:05:01

标签: java try-catch classnotfoundexception

我有一个通过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}}。

有没有更好的方法来解决这个问题?

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();
}