好吧,我试图理解和阅读可能导致它的原因,但我就是无法理解:
我的代码中有这个:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
事情是,当它试图调用它抛出的某些方法时 InvocationTargetException
而不是其他一些预期的异常(特别是 ArrayIndexOutOfBoundsException
)。因为我实际上知道调用了什么方法,所以我直接转到此方法代码并为假设抛出 ArrayIndexOutOfBoundsException
的行添加了一个 try-catch 块,它确实按预期抛出了 ArrayIndexOutOfBoundsException
。 Yet when going up it somehow changes to InvocationTargetException
and in the code above catch(Exception e)
e is InvocationTargetException
and not ArrayIndexOutOfBoundsException
as expected.
什么可能导致这种行为或我如何检查这种情况?
原文由 user550413 发布,翻译遵循 CC BY-SA 4.0 许可协议
您通过使用反射调用方法添加了额外的抽象级别。反射层将任何异常包装在
InvocationTargetException
中,这让您可以区分 实际 由反射调用失败(例如,可能您的参数列表无效)引起的异常和失败在调用的方法中。只需解开
InvocationTargetException
中的原因,您就会找到原始原因。