好吧,我试图理解并阅读可能导致它的原因,但我就是无法理解:
我的代码中有这个:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
事情是,当它试图调用某个方法时,它会抛出 InvocationTargetException
而不是其他一些预期的异常(特别是 ArrayIndexOutOfBoundsException
)。 因为我实际上知道调用了什么方法,所以我直接进入了这个方法代码,并为应该抛出 ArrayIndexOutOfBoundsException
的行添加了一个 try-catch block ,它确实抛出了 ArrayIndexOutOfBoundsException
作为预期的。然而上去的时候 以某种方式更改为 InvocationTargetException
和上面的代码 catch(Exception e)
e 是 InvocationTargetException
而不是 ArrayIndexOutOfBoundsException
正如预期的那样。
什么可能导致这种行为或者我如何检查这种情况?
您通过使用反射调用方法添加了额外的抽象级别。反射层将任何异常包装在 InvocationTargetException
中,它可以让您区分由反射调用失败引起的异常实际上(也许您的参数列表不是有效,例如)和调用的方法中的失败。
只需解开 InvocationTargetException
中的原因,您就会得到原始原因。
我是一名优秀的程序员,十分优秀!