リフレクション


定義済のクラスの情報にアクセスするためのしくみをリフレクションと呼ぶ。

🗻 Classクラス

Classクラスはプログラムの実行時、クラスがロードされた時点で生成されるクラスやインタフェースに関する情報をもつオブジェクトです。

以下はClass型のインスタンスを得る際のサンプルです。

package com.morizyun.sample;

class Hoge {
}

public class Main {
public static void main(String[] args) {
// 予約語としての class からインスタンスを取得
System.out.println(Hoge.class.getSimpleName());

// 基底クラスである Objectのメソッドからインスタンスを取得
System.out.println(new Hoge().getClass().getSimpleName());

// FQDN によるクラス名を指定して、インスタンスを取得
Class klass = Class.forName(com.morizyun.Hoge);
}
}

以下はClass型のオブジェクトを介して、クラスに関する情報にアクセスするサンプルです。

package com.morizyun.sample;

class Hoge {
}

public class Main {
public static void main(String[] args) {
Class klass = Class.forName(com.morizyun.sample.Hoge);

// クラスの宣言に付与されたアノテーションを取得
Annotation[] annotations = klass.getAnnotations();

// クラスの宣言にある public なコンストラクタの定義を取得
Constructor[] constructors = klass.getConstructors();

// private なコンストラクタも含めてコンストラクタの定義を取得
Constructor[] allConstructors = klass.getDeclaredConstructors();

// アクセス可能なすべてのフィールドの定義を取得
Field[] fields = klass.getFields();

// 定義されたすべてのフィールドを取得
Field[] allFields = klass.getDeclaredFields();

// public なメンバメソッドを取得
Method[] methods = klass.getMethods();

// すべてのメソッドを取得
Method[] allMethods = klass.getDeclaredMethods();
}
}

🏀 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍