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

好吧,我试着去理解和阅读是什么导致了它,但我就是不明白:

我的代码中有以下内容:

试试看{
..
m、 调用(testObject);
..
}捕获(断言错误){
...
}捕获(例外e){
..
}

问题是,当它试图调用某个方法时,它抛出
InvocationTargetException而不是其他一些预期的异常(特别是ArrayIndexOutOfBoundsException)。
因为我知道调用了什么方法,所以我直接转到这个方法代码,并为假设抛出ArrayIndexOutOfBoundsException的行添加了一个try-catch块,它真的像预期的那样抛出了ArrayIndexOutOfBoundsException。然而当它上升的时候
以某种方式更改为InvocationTargetException和上面的代码catch(异常e)
e是InvocationTargetException而不是ArrayIndexOutOfBoundsException
正如所料

什么会导致这样的行为,或者我如何检查这样的事情

通过调用带有反射的方法,您增加了额外的抽象级别。反射层将任何异常封装在InvocationTargetException中,通过该层可以区分由反射调用中的失败(例如,您的参数列表可能无效)导致的异常与调用的方法中的失败之间的区别

只要在InvocationTargetException中打开原因,就可以找到原始原因

发表评论