Java オブジェクトに関連する Class オブジェクトの取得
オブジェクトに関連する Class オブジェクトの取得
オブジェクトの実行時の型情報は、 Class オブジェクトとして取得できます。
Class オブジェクトは getClass() メソッドで取得できます。
全てのオブジェクトのスーパークラスである Object クラスに getClass() メソッドがあるので、 どのオブジェクトに対しても getClass メソッドを呼び出して Class オブジェクトを取得することができます。
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 TestApp {
public static void main(String[] args) {
Employee e = new Employee("Ichiro", "Suzuki");
Class<? extends Employee> c = e.getClass();
System.out.println("Class name: " + c.getName());
System.out.println("Methods:");
for (Method m : c.getMethods()) {
boolean isFirstParam = true;
System.out.print(" " + m.getName() + "(");
for (Class<?> p : m.getParameterTypes()) {
if (!isFirstParam) {
System.out.print(",");
}
System.out.print(p.getName());
isFirstParam = false;
}
System.out.println(")");
}
}
}
このコードを実行すると、次の結果を得ました。
Class name: com.keicode.java.test.Employee
Methods:
getFirstName()
getLastName()
wait(long)
wait(long,int)
wait()
equals(java.lang.Object)
toString()
hashCode()
getClass()
notify()
notifyAll()
この例では、 9-10行目で Employee オブジェクトを作成し、 次に getClass メソッドを使ってそのオブジェクトに関連付けされた Class オブジェクトを取得しています。
Class オブジェクトの getName() メソッドは com.keicode.java.test.Employee という文字列を返しています。
getMethods() メソッドは Method の配列を返します。
Method オブジェクトはひとつのメソッドに関する情報を保持します。 この中にこのオブジェクトで呼び出せるメソッド名とパラメータ情報があります。