一尘不染

什么会导致java.lang.reflect.InvocationTargetException?

java

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

我的代码中有这个地方:

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

事实是,当它尝试调用某些方法时,它将引发InvocationTargetException而不是其他预期的异常(特别是ArrayIndexOutOfBoundsException)抛出 。我实际上知道调用了什么方法,所以我直接转到该方法代码,并为应该抛出的行添加了一个try-catchArrayIndexOutOfBoundsException,它实际上ArrayIndexOutOfBoundsException按预期抛出。然而,当它上升时,以某种方式更改了e InvocationTargetException上面的代码并没有 按预期进行。catch(Exception e)InvocationTargetExceptionArrayIndexOutOfBoundsException

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


阅读 487

收藏
2020-03-11

共1个答案

一尘不染

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

只需解开内的原因InvocationTargetException,你就可以找到原始原因。

2020-03-11