InvocationTargetException

InvocationTargetException

好吧,我试图理解并阅读可能导致它的原因,但我却无法理解:

我的代码中有这个地方:

 try{
 ..
 m.invoke(testObject);
 ..
 } catch(AssertionError e){
 ...
 } catch(Exception e){
 ..
 }

问题是,当它尝试调用某些方法时会抛出
InvocationTargetException而不是其他一些预期的异常(特别是ArrayIndexOutOfBoundsException)。
由于我实际上知道调用了哪种方法,因此我直接转到此方法代码,并为该行添加了一个try-catch块,该块假定会抛出ArrayIndexOutOfBoundsException,并且确实按预期的方式抛出了ArrayIndexOutOfBoundsException。然而当它上升时
以某种方式更改为InvocationTargetException以及catch(Exception e)上方的代码
e是InvocationTargetException而不是ArrayIndexOutOfBoundsException 如预期的那样。

是什么原因导致这种行为的?我该如何检查?

最佳答案

通过使用反射调用方法,您已经添加了额外的抽象级别。反射层将任何异常包装在InvocationTargetException中,这可以让您分辨出反射调用失败(例如,您的参数列表无效)实际导致的异常与所调用方法中的失败之间的区别。

只需在InvocationTargetException中解开原因,就可以找到原始原因。

08-05 09:58