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

时间:2013-12-06 16:28:30

标签: java reflection

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

public class Foo
{
    public static void foo() {throw new UnsupportedOperationException();}
}

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

Foo.class.getMethod("foo").invoke();

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

如何使用Java的反射检索真正的异常(即,UnsupportedOperationException)?

3 个答案:

答案 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

相关问题