天天看點

InvocationTargetException異常

今天在開發時,使用反射機制調用具體的類,方法時,在方法中,我測試時抛出了一個CodeException自定義異常,但是,卻被Exception catch住了,當時很疑惑,CodeException哪去了呢?

後來,才發現,通過反射機制調用的方法中,若是抛出異常,都會被轉為了InvocationTargetException。而我的代碼中,也沒有對此異常做處理,隻想catchCodeException,最終被Exception catch住了。

<span style="font-size:14px;">if (paymentUser != null) {
     String errorCode = "420406";
     String errorMessage = "該手機号已經注冊";
     throw new CodeException(errorCode, errorMessage);
 }</span>      

再後來,查閱資料,發現,可以通過InvocationTargetException的getTargetException()方法獲得原生的異常,這才将問題解決,

<span style="font-size:14px;">try {//反射
  MethodReflectUtil.invokeExactMethod(serviceBase, method, params, paramsType);
  } catch (NoSuchMethodException e) {
    throw new CodeException("2007","系統内部錯誤");
  } catch (IllegalAccessException e) {
    throw new CodeException("2008","系統内部錯誤");
  } catch (InvocationTargetException e) {
    throw new CodeException("2009",e.getTargetException().getMessage());
  }</span>      

這樣,滿足了我的将異常被CodeException所捕獲餓需求。

繼續閱讀