9

すべてのフィールドまたはプロパティ記述子を反復処理せずに、特定の注釈で注釈が付けられたオブジェクト(クラスではない)のすべてのフィールドとプロパティを取得するにはどうすればよいですか?

私の目的は、getClass()や、インスタンスのフィールドまたはメンバー変数ではないクラスのフィールドなど、明らかに注釈が付けられていないすべてのフィールドまたはプロパティでの不要な反復を回避することです。

それとも、反復が唯一の方法ですか?これを行うための他のより良い方法はありませんか?

4

1 に答える 1

6

すべての作業を行うリフレクション パッケージを使用できます。プロジェクトの説明:

Reflections はクラスパスをスキャンし、メタデータのインデックスを作成し、実行時にクエリを実行できるようにし、プロジェクト内の多くのモジュールについてその情報を保存および収集できます。

Reflections を使用すると、次のようなメタデータを照会できます。

  • あるタイプのすべてのサブタイプを取得する
  • 注釈パラメーターが一致しない、何らかの注釈で注釈が付けられたすべての型/メソッド/フィールドを取得します
  • 正規表現に一致するすべてのリソースを取得します

例:

 Reflections reflections = new Reflections("my.project.prefix");

 Set<Class<? extends SomeType>> subTypes = 
           reflections.getSubTypesOf(SomeType.class);

 Set<Class<?>> annotated = 
           reflections.getTypesAnnotatedWith(SomeAnnotation.class);

 Set<Class<?>> annotated1 =
           reflections.getTypesAnnotatedWith(new SomeAnnotation() {
                public String value() { return "1"; }
                public Class<? extends Annotation> annotationType() { 
                    return SomeAnnotation.class; 
                }
            });
于 2012-12-14T08:33:24.417 に答える