FC2ブログ
HOME   »  スポンサー広告  »  スポンサーサイト   »  Java  »  [Java]リフレクションを使用したスーパークラスのメンバー情報の取得

スポンサーサイト

上記の広告は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クラス)の全てのメンバー情報が取得できている。


関連記事
Comment
こんにちわ
あぷいん倶楽部 管理人です。
忍者ブログからFC2へ引っ越しましたので
お手数ですが、URLの変更をお願いします。

http://appinclub.blog.fc2.com/
リンク先を変更致しました
あぷいん倶楽部 管理人 様

御連絡ありがとうございます。

リンク先を御連絡頂いたURLに変更致しました。
Trackback
Trackback URL
Comment Form
管理者にだけ表示を許可する
プロフィール

まさお

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

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


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

人気ブログランキングへ

ブログランキング



ブログ王

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

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