|
||||||||||||||||||||||
|
リフレクション ~ オブジェクトに関連する Class オブジェクトの取得オブジェクトに関連する Class オブジェクトの取得さて、繰り返しになりますがあるオブジェクトの実行時の型情報は、 Class オブジェクトとして取得できます。 これは getClass() メソッドで取得できます。 Object クラスに getClass() メソッドがあるので、 どのオブジェクトに対しても getClass メソッドを呼び出すことができ、 Class オブジェクトを取得することができます。 実際に Class オブジェクトを利用する例を見てください。 まず、 Employee (従業員) クラスを定義しましょう。
package com.keicode.java.test;
public class Employee {
String fname;
String lname;
public Employee(String fname, String lname){
this.fname = fname;
this.lname = lname;
}
public String getFirstName(){
return fname;
}
public String getLastName(){
return lname;
}
}
次のテストプラグラムでは、この Employee オブジェクトを作成して、そのオブジェクトからオブジェクトのクラス名(文字列)、メソッド名、 そしてそのメソッドの引数を調べて出力します。
package com.keicode.java.test;
import java.lang.reflect.Method;
public class ReflectionTestApp1 {
public static void main(String[] args) {
Employee e = new Employee("Ichiro", "Suzuki");
Class<? extends Employee> c = e.getClass();
System.out.println(c.getName());
for(Method m : c.getMethods()){
System.out.println(m.getName());
System.out.println("(");
for(Class<?> p : m.getParameterTypes()){
System.out.println( "\t" + p.getName());
}
System.out.println(")");
}
}
}
このコードを実行すると、次の結果を得ました。 com.keicode.java.test.Employee getFirstName ( ) getLastName ( ) wait ( long ) wait ( long int ) wait ( ) hashCode ( ) getClass ( ) equals ( java.lang.Object ) toString ( ) notify ( ) notifyAll ( ) この例では、 次の箇所で Employee オブジェクトを作成し、 次に getClass メソッドを使ってそのオブジェクトに関連付けされた Class オブジェクトを取得しています。
Employee e = new Employee("Ichiro", "Suzuki");
Class<? extends Employee> c = e.getClass();
Class オブジェクトの getName メソッドは com.keicode.java.test.Employee という文字列を返しています。 getMethods では Method の配列が返され、それによってそのオブジェクトで呼び出せるメソッド (及びパラメータ) が確認できています。 |
|
© 2010 Java 入門 |
|||||||||||||||||||