FC2ブログ
HOME   »  2013年02月
Archive | 2013年02月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java]リフレクションを使用したスーパークラスのメンバー情報の取得

以前の記事「リフレクションを使用したクラスメンバー情報の取得」で書いたgetFieldsメソッド、getMethodsメソッドではスーパークラスのメンバー情報を取得できるが、対象となるのはpublicメンバーのみである。

スーパークラスのpublicメンバー以外のメンバー情報を取得したい場合、対象クラスのスーパークラスが既知であればそのスーパークラスについてのClassクラスのインスタンスを直接取得し、そこからメンバー情報を取得できるが、対象クラスの情報がない場合(プログラム実行時に初めて対象クラスが指定される等)は、ClassクラスのgetSuperclassメソッドを使用する。

「リフレクションを使用したクラスメンバー情報の取得」で例として書いたSubクラスについて、以下の様にスーパークラスのメンバー情報を取得する。
public class Main {
    public static void main(String[] args) {
        Class<?> clazz;
        Class<?> superClazz;
        Field[] fields;
        Constructor<?>[] constructors;
        Method[] methods;
        try {
            clazz = Class.forName("reflectiontest.subpackage.Sub");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }
        superClazz = clazz.getSuperclass();
        if (superClazz != null) {
            fields = superClazz.getDeclaredFields();
            System.out.println("getDeclaredFields()メソッドで取得したスーパークラスのフィールド");
            for (Field field : fields) {
                System.out.println(field.getName());
            }
            constructors =superClazz.getDeclaredConstructors();
            System.out.println("");
            System.out.println("getDeclaredConstructors()メソッドで取得したスーパークラスのコンストラクタ");
            for (Constructor<?> constructor : constructors) {
                System.out.println(constructor.getName());
            }
            methods = superClazz.getDeclaredMethods();
            System.out.println("");
            System.out.println("getDeclaredMethods()メソッドで取得したスーパークラスのメソッド");
            for (Method method : methods) {
                System.out.println(method.getName());
            }
        }
    }
}
まず9行目でSubクラスについてのClassクラスのインスタンスを取得し、14行目でgetSuperclassメソッドを使用してそのスーパークラス(今回の例ではSuperクラス)についてのClassクラスのインスタンスを取得している。
そして、以降でgetDeclaredFieldsメソッド、getDeclaredConstructorsメソッド、getDeclaredMethodsメソッドを使用してスーパークラスのメンバー情報を取得している。

上記の実行結果は以下の通り。


getDeclaredFields()メソッドで取得したスーパークラスのフィールド
defaultSuperField
privateSuperField
protectedSuperField
publicSuperField

getDeclaredConstructors()メソッドで取得したスーパークラスのコンストラクタ
reflectiontest.superpackage.Super
reflectiontest.superpackage.Super
reflectiontest.superpackage.Super
reflectiontest.superpackage.Super
reflectiontest.superpackage.Super

getDeclaredMethods()メソッドで取得したスーパークラスのメソッド
defaultSuperMethod
privateSuperMethod
protectedSuperMethod
publicSuperMethod


スーパークラス(Superクラス)の全てのメンバー情報が取得できている。


スポンサーサイト
プロフィール

まさお

Author:まさお
プログラミングは趣味レベルなので、お手柔らかに。

ブログランキング
ブログランキング参加中。是非クリックお願いします。


にほんブログ村 IT技術ブログ Androidアプリ開発へ

人気ブログランキングへ

ブログランキング



ブログ王

ブログランキング【ブログの惑星】

プログラム人気ブログランキング
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。