java.lang.reflect.InvocationTargetException の原因の調査
Java リフレクションでは、次の場合に InvocationTargetException が発生します。リフレクションを介してメソッドを呼び出そうとしています。これは、基礎となる未チェックの例外が発生したことを示しています。これは、提供されたコード サンプルの ArrayIndexOutOfBoundsException など、メソッドが特定の例外をスローすると予想される場合でも発生する可能性があります。
考えられる説明
リフレクションを使用する場合、追加の抽象化レイヤーが導入され、実際のメソッド呼び出しによってスローされた例外が InvocationTargetException でラップされます。これにより、リフレクション呼び出し自体から発生する例外 (無効な引数など) と、呼び出されたメソッド内で生成された例外を区別できるようになります。
基礎となる例外のラップ解除
アクセス元の例外では、getCause() メソッドを使用して InvocationTargetException をラップ解除できます。これにより、基礎となる例外が明らかになり、適切に処理できます。
次に例を示します:
<code class="java">try { m.invoke(testObject); } catch (InvocationTargetException ex) { Throwable cause = ex.getCause(); if (cause instanceof ArrayIndexOutOfBoundsException) { // Handle ArrayIndexOutOfBoundsException here } }</code>
または、printStackTrace() を使用して、コール スタックを調べて、「原因:」セクションを特定します。これにより、基礎となる例外に関する情報が得られます。
慎重なアプローチ
printStackTrace() は、機密情報が公開される可能性があるため、本番コードでは使用できません。ログを記録するために、getCause() メソッドを使用し、基になる例外を明示的に処理することをお勧めします。
以上がjava.lang.reflect.InvocationTargetException の背後にある隠れた原因を明らかにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。