リフレクション


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

😸 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();
}
}

🐮 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)