我有一个想通过反射调用的方法。
该方法对其参数进行各种检查,并可能引发NullPointer和IllegalArgument异常。

通过Reflection调用该方法还可能引发需要捕获的IllegalArgument和NullPointer异常。有没有一种方法可以确定异常是由反射调用方法还是由方法本身引起的?

最佳答案

如果方法本身抛出异常,则将其包装在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
     }
}

10-07 20:34