【问题标题】:Java reflection and checked exceptionsJava 反射和检查异常
【发布时间】:2012-01-29 00:08:50
【问题描述】:

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

通过反射调用该方法也可能抛出需要捕获的 IllegalArgument 和 NullPointer 异常。有没有办法判断异常是反射Invoke方法引起的,还是方法本身引起的?

【问题讨论】:

    标签: java reflection exception-handling


    【解决方案1】:

    如果方法本身抛出异常,那么它将被包裹在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
    【解决方案2】:

    在回答原始问题时,异常中的堆栈跟踪会有所不同。

    作为替代方案,您可以让函数捕获这些异常并将它们作为方法(或类)特定的异常重新抛出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多