什么可能導致java.lang.reflect.InvocationTargetException?好吧,我試圖理解和閱讀可能導致它的原因,但我無法得到它:我在我的代碼中有這個地方: try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}事實是,當它試圖調用某個方法時,它會拋出 InvocationTargetException而不是其他預期的異常(具體而言ArrayIndexOutOfBoundsException)。因為我實際上知道調用了什么方法,所以我直接使用了這個方法代碼,并為假設要拋出的行添加了一個try-catch塊ArrayIndexOutOfBoundsException,它確實ArrayIndexOutOfBoundsException按預期拋出。然而,當它上升時它以某種方式改變,InvocationTargetException并且在上面的代碼中,catch(Exception e) e InvocationTargetException并不ArrayIndexOutOfBoundsException 像預期的那樣。什么可能導致這樣的行為或我如何檢查這樣的事情?
3 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
您通過使用反射調用方法添加了額外的抽象級別。反射層包裝了一個異常InvocationTargetException
,它允許您區分實際由反射調用中的失敗引起的異常(例如,您的參數列表無效)和被調用方法中的失敗。
只需打開原因InvocationTargetException
,你就會得到原來的原因。

有只小跳蛙
TA貢獻1824條經驗 獲得超8個贊
如果是,則拋出異常
InvocationTargetException - 如果基礎方法拋出異常。
因此,如果使用反射API調用的方法拋出異常(例如運行時異常),則反射API會將異常包裝到InvocationTargetException
。
添加回答
舉報
0/150
提交
取消