2012-01-29 52 views
5

我有一個方法,我想通過反射調用。 該方法對其參數進行一些各種檢查,並可以拋出NullPointer和IllegalArgument異常。Java反射和檢查異常

通過反射調用方法還可以拋出需要捕獲的IllegalArgument和NullPointer異常。有沒有辦法確定異常是由Invoke反射方法還是方法本身造成的?

回答

17

如果方法本身拋出異常,那麼它將被封裝在InvocationTargetException中。

你的代碼可能看起來像這樣

try 
{ 
    method . invoke (args) ; 
} 
catch (IllegalArgumentException cause) 
{ 
    // reflection exception 
} 
catch (NullPointerException cause) 
{ 
    // reflection exception 
} 
catch (InvocationTargetException cause) 
{ 
    try 
    { 
      throw cause . getCause () ; 
    } 
    catch (IllegalArgumentException c) 
    { 
      // method exception 
    } 
    catch (NullPointerException c) 
    { 
      //method exception 
    } 
} 
+3

該異常稱爲'InvocationTargetException',而不是'MethodInvocationException'。 – 2012-01-29 00:30:03

+1

@Stephen C好的。 – emory 2012-01-29 17:27:02

0

在回答原來的問題,在異常堆棧跟蹤會有所不同。

作爲替代方案,您可以讓函數捕獲這些異常並將它們重新拋出爲方法(或類)的特定異常。