检索从反射调用的方法抛出的*real*异常

One*_*ree 3 java reflection

假设我在下面声明了一个方法foo().

public class Foo
{
    public static void foo() {throw new UnsupportedOperationException();}
}
Run Code Online (Sandbox Code Playgroud)

然后我有使用反射调用该方法的代码:

Foo.class.getMethod("foo").invoke();
Run Code Online (Sandbox Code Playgroud)

这将抛出InvocationTargetException而不是UnsupportedOperationException实际抛出的方法.

我该如何找回真正的例外(即,将抛出UnsupportedOperationException)与Java的反射?

Sot*_*lis 6

适用于Javadoc InvocationTargetException状态

InvocationTargetException是一个已检查的异常,它包装被调用的方法或构造函数抛出的异常.

只需打电话InvocationTargetException#getCause()就可以获得包装好的异常(或者getTargetException()如果你想成为老派).