すべてのフィールドまたはプロパティ記述子を反復処理せずに、特定の注釈で注釈が付けられたオブジェクト(クラスではない)のすべてのフィールドとプロパティを取得するにはどうすればよいですか?
私の目的は、getClass()や、インスタンスのフィールドまたはメンバー変数ではないクラスのフィールドなど、明らかに注釈が付けられていないすべてのフィールドまたはプロパティでの不要な反復を回避することです。
それとも、反復が唯一の方法ですか?これを行うための他のより良い方法はありませんか?
すべてのフィールドまたはプロパティ記述子を反復処理せずに、特定の注釈で注釈が付けられたオブジェクト(クラスではない)のすべてのフィールドとプロパティを取得するにはどうすればよいですか?
私の目的は、getClass()や、インスタンスのフィールドまたはメンバー変数ではないクラスのフィールドなど、明らかに注釈が付けられていないすべてのフィールドまたはプロパティでの不要な反復を回避することです。
それとも、反復が唯一の方法ですか?これを行うための他のより良い方法はありませんか?
すべての作業を行うリフレクション パッケージを使用できます。プロジェクトの説明:
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;
}
});