了解 Java 中的调用目标异常包装

understanding Invocation Target Exception wrapping in Java

m 是一种方法,我想通过反射在特定实例上调用它。 下面的代码展示了我是如何进行调用的:

try {
    m.invoke(classInstance);                
} catch (OOPAssertionError e) {

} catch (Exception e) {
    system.out(e.getCause().getClass().getName());
}

现在,当我调用我刚才尝试调用的特定方法时,实例假设抛出以下 class,即前面代码中的 m:

public class OOPAssertionError extends AssertionError {
}

我以为程序会捕获 OOPAssertionError,但实际上它捕获了 Exception。 并打印以下行:"package.OOPAssertionError".

为什么会这样?

InvocationTargetException 包装你的方法的异常,就像在 javadoc 中写的那样。

有关详细信息,请参阅 What could cause java.lang.reflect.InvocationTargetException?

祝你好运! ;)