|
||||||||||||||||||||||
|
リフレクション ~ Class オブジェクトからのインスタンスの作成リフレクション及び Class クラスについては リフレクション ~ Class クラス をみてください。 ここではクラス名が分かった場合に、その名前からそのクラスのインスタンス (オブジェクト) を作ります。 Class オブジェクトからのインスタンス生成Class オブジェクトを取得したら newInstance を呼び出すことで、その Class オブジェクトが型情報を保持するクラスのインスタンスを作ることができます。 以前の例では、 "com.keicode.java.test.Employee" という文字列から、 この Employee クラスの Class オブジェクトを取得できました。 このオブジェクトの newInstance メソッドを呼ぶことで、 Employee クラスのインスタンス (Employee オブジェクト) を作りましょう。 newInstance メソッドは失敗した場合に IllegalAccessException 例外または InstantiationException 例外を投げますので、 newInstance メソッドを呼ぶ箇所は try-catch ブロックで囲みます。 この newInstance メソッドはデフォルトコンストラクタを呼びます。デフォルトコンストラクタというのは、引数を持たないコンストラクタのことです。 従って、newInstance メソッドを用いてデフォルトコンストラクタを持たないクラスのインスタンス化を試みても失敗します。 ここでは、 Employee クラスではデフォルトコンストラクタは実装していないので、次のコードは失敗します。
Class<?> c;
c = Class.forName("com.keicode.java.test.Employee");
Employee e = (Employee) c.newInstance();
実行結果 java.lang.InstantiationException: com.keicode.java.test.Employee at java.lang.Class.newInstance0(Class.java:357) at java.lang.Class.newInstance(Class.java:325) at com.keicode.java.test.ReflectionTestApp3.main(ReflectionTestApp3.java:9) そこで、 Employee クラスにデフォルトコンストラクタを実装します。
package com.keicode.java.test;
public class Employee {
String fname;
String lname;
public Employee(){
}
...
|
|
© 2010 Java 入門 |
|||||||||||||||||||