【发布时间】:2012-01-29 00:08:50
【问题描述】:
我有一个我想通过反射调用的方法。 该方法对其参数进行各种检查,并可能引发 NullPointer 和 IllegalArgument 异常。
通过反射调用该方法也可能抛出需要捕获的 IllegalArgument 和 NullPointer 异常。有没有办法判断异常是反射Invoke方法引起的,还是方法本身引起的?
【问题讨论】:
标签: java reflection exception-handling
我有一个我想通过反射调用的方法。 该方法对其参数进行各种检查,并可能引发 NullPointer 和 IllegalArgument 异常。
通过反射调用该方法也可能抛出需要捕获的 IllegalArgument 和 NullPointer 异常。有没有办法判断异常是反射Invoke方法引起的,还是方法本身引起的?
【问题讨论】:
标签: java reflection exception-handling
如果方法本身抛出异常,那么它将被包裹在InvocationTargetException 中。
您的代码可能如下所示
try
{
method . invoke ( args ) ;
}
catch ( IllegalArgumentException cause )
{
// reflection exception
}
catch ( NullPointerException cause )
{
// reflection exception
}
catch ( InvocationTargetException cause )
{
try
{
throw cause . getCause ( ) ;
}
catch ( IllegalArgumentException c )
{
// method exception
}
catch ( NullPointerException c )
{
//method exception
}
}
【讨论】:
InvocationTargetException,而不是MethodInvocationException。
在回答原始问题时,异常中的堆栈跟踪会有所不同。
作为替代方案,您可以让函数捕获这些异常并将它们作为方法(或类)特定的异常重新抛出。
【讨论】: