InvocationTargetException
日本語 | 呼び出し対象例外 |
英語 | invocation target exception |
ふりがな | いんぼけーしょんたーげっとえくせぷしょん |
フリガナ | インボケーションターゲットエクセプション |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.reflect.InvocationTargetException。
例外の一種。
Methodクラスのinvoke()メソッドが投げる例外。
リフレクション時に投げられる例外。
Methodクラスのinvoke()メソッドで、他のクラスのメソッドを呼び出し、その呼び出したメソッドが例外を投げた際に投げられる例外。
invoke()メソッドは、対象のメソッドが投げた例外を拾い、InvocationTargetExceptionクラスのコンストラクタに渡して、このInvocationTargetExceptionクラスを投げ直す。
つまりInvocationTargetExceptionクラスが本当の例外の「ラッパー」となる。
これは、invoke()メソッドは「あらゆるメソッド」を呼び出す必要があり、その全てのthrows指定に対応するためである。
InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。
例外の一種。
Methodクラスのinvoke()メソッドが投げる例外。
リフレクション時に投げられる例外。
Methodクラスのinvoke()メソッドで、他のクラスのメソッドを呼び出し、その呼び出したメソッドが例外を投げた際に投げられる例外。
invoke()メソッドは、対象のメソッドが投げた例外を拾い、InvocationTargetExceptionクラスのコンストラクタに渡して、このInvocationTargetExceptionクラスを投げ直す。
つまりInvocationTargetExceptionクラスが本当の例外の「ラッパー」となる。
これは、invoke()メソッドは「あらゆるメソッド」を呼び出す必要があり、その全てのthrows指定に対応するためである。
InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。
// Sample.java
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Sample
{
public static void main( String[] args )
{
String string = "あいうえお";
// string変数のClassクラスを取得します。
Class stringClass = string.getClass();
// toString()メソッドだけ取っておきます。
Method compareToMethod = null;
// Stringクラスのメソッド一覧を取得します。
Method[] methods = stringClass.getMethods();
for( int iF1 = 0; iF1 < methods.length; ++iF1 )
{
Method method = methods[iF1];
if( method.getName().equals( "compareTo" ) )
{
compareToMethod = method;
}
}
// compareTo()メソッドを呼び出します。
try
{
// compareToMethodには「toString()メソッド」が入っています。
// ここで、第1引数にnullを渡して、わざとNullPointerException例外を
// 投げさせます。
compareToMethod.invoke( string, new Object[]{ null } );
}
catch( InvocationTargetException e )
{
e.printStackTrace();
// java.lang.reflect.InvocationTargetException
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
// Caused by: java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// ... 5 more
// 本当のメソッド(StringクラスのcompareTo()メソッド)で
// 投げられた例外はgetCause()メソッドで取得できます。
Throwable throwable = e.getCause();
throwable.printStackTrace();
// java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
}
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
}
}
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Sample
{
public static void main( String[] args )
{
String string = "あいうえお";
// string変数のClassクラスを取得します。
Class stringClass = string.getClass();
// toString()メソッドだけ取っておきます。
Method compareToMethod = null;
// Stringクラスのメソッド一覧を取得します。
Method[] methods = stringClass.getMethods();
for( int iF1 = 0; iF1 < methods.length; ++iF1 )
{
Method method = methods[iF1];
if( method.getName().equals( "compareTo" ) )
{
compareToMethod = method;
}
}
// compareTo()メソッドを呼び出します。
try
{
// compareToMethodには「toString()メソッド」が入っています。
// ここで、第1引数にnullを渡して、わざとNullPointerException例外を
// 投げさせます。
compareToMethod.invoke( string, new Object[]{ null } );
}
catch( InvocationTargetException e )
{
e.printStackTrace();
// java.lang.reflect.InvocationTargetException
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
// Caused by: java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// ... 5 more
// 本当のメソッド(StringクラスのcompareTo()メソッド)で
// 投げられた例外はgetCause()メソッドで取得できます。
Throwable throwable = e.getCause();
throwable.printStackTrace();
// java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
}
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
}
}
// Sample.java import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; public class Sample { public static void main( String[] args ) { String string = "あいうえお"; // string変数のClassクラスを取得します。 Class stringClass = string.getClass(); // toString()メソッドだけ取っておきます。 Method compareToMethod = null; // Stringクラスのメソッド一覧を取得します。 Method[] methods = stringClass.getMethods(); for( int iF1 = 0; iF1 < methods.length; ++iF1 ) { Method method = methods[iF1]; if( method.getName().equals( "compareTo" ) ) { compareToMethod = method; } } // compareTo()メソッドを呼び出します。 try { // compareToMethodには「toString()メソッド」が入っています。 // ここで、第1引数にnullを渡して、わざとNullPointerException例外を // 投げさせます。 compareToMethod.invoke( string, new Object[]{ null } ); } catch( InvocationTargetException e ) { e.printStackTrace(); // java.lang.reflect.InvocationTargetException // at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) // at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) // at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) // at java.lang.reflect.Method.invoke(Method.java:324) // at Sample.main(Sample.java:32) // Caused by: java.lang.NullPointerException // at java.lang.String.compareTo(String.java:728) // at java.lang.String.compareTo(String.java:777) // ... 5 more // 本当のメソッド(StringクラスのcompareTo()メソッド)で // 投げられた例外はgetCause()メソッドで取得できます。 Throwable throwable = e.getCause(); throwable.printStackTrace(); // java.lang.NullPointerException // at java.lang.String.compareTo(String.java:728) // at java.lang.String.compareTo(String.java:777) // at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) // at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) // at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) // at java.lang.reflect.Method.invoke(Method.java:324) // at Sample.main(Sample.java:32) } catch( IllegalAccessException e ) { e.printStackTrace(); } catch( IllegalArgumentException e ) { e.printStackTrace(); } } }