假设我在下面声明了一个方法foo()。
public class Foo
{
public static void foo() {throw new UnsupportedOperationException();}
}
然后我有使用反射调用方法的代码:
Foo.class.getMethod("foo").invoke();
这将抛出InvocationTargetException
而不是方法中实际抛出的UnsupportedOperationException
。
如何使用Java的反射检索真正的异常(即,UnsupportedOperationException)?
答案 0 :(得分:6)
InvocationTargetException
州的javadoc
InvocationTargetException是一个包装了一个的已检查异常 被调用的方法或构造函数抛出的异常。
只需致电InvocationTargetException#getCause()
即可获取已包装的例外情况(或getTargetException()
,如果您想成为老年人)。
答案 1 :(得分:0)
由于反复调用,您获得了InvocationTargetException
。处理Exception
。
答案 2 :(得分:0)
try{
// do your invoke
}
catch ( InvocationTargetException e)
{
try
{
throw e.getCause ( ) ;
}
catch ( IllegalArgumentException e )
{
// method exception
}
catch ( NullPointerException e )
{
//method exception
}
}
http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html