2012-01-29 4 views
5

私はリフレクションで呼びたいメソッドを持っています。 このメソッドは、引数についてさまざまなチェックを行い、NullPointer例外とIllegalArgument例外をスローすることができます。Javaの反映とチェックされた例外

Reflectionを介してメソッドを呼び出すと、キャッチする必要があるIllegalArgument例外とNullPointer例外をスローすることもできます。例外がリフレクトInvokeメソッドに起因するのか、それともメソッド自体によって発生するのかを判断する方法はありますか?

答えて

17

メソッド自体が例外をスローした場合は、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 
    } 
} 
+3

例外は、 'MethodInvocationException'ではなく' InvocationTargetException'と呼ばれます。 –

+1

@Stephen C良いキャッチ。 – emory

0

ようになり

、例外のスタックトレースは異なるだろう。

代わりに、これらの例外をキャッチしてメソッド(またはクラス)固有の例外として再利用することができます。

関連する問題