0

注釈

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Searchable {
    SearchType[] types() default { SearchType.ALL };
}

いくつかの方法での反射

Reflections reflections = new Reflections(packageName);
reflections.getFieldsAnnotatedWith(); // Here's the problem

Searchable 少なくともSearchType.ALL. _ new Searchable() { ... }このメソッドで渡すa を定義しようとしました。ただし、これは完全に一致するフィールドのみになります。例のみを含むSearchType.ALL。こちらです:

new Searchable() {
        @Override public SearchType[] types() { return { SearchType.ALL }; }
        @Override public Class<? extends Annotation> annotationType() { return Searchable.class; }
        }

@Searchable(types = { SearchType.ALL, SearchType.TEXT })が含まれているので、 のフィールドもヒットしてほしいSearchType.ALLです。どうすればこれを達成できますか?

4

1 に答える 1

0

Reflections API についてはよくわかりませんが、Searchable アノテーションでアノテーションが付けられたすべてのフィールドを取得し、Searchable アノテーションのタイプに SearchType.ALL が含まれているかどうかを確認できます。

Set<Field> fields = reflections.getFieldsAnnotatedWith(Searchable.class);
Set<Field> wanted = new HashSet<Field>();
for (Field field : fields) {
    Searchable annotation = field.getAnnotation(Searchable.class);
    if (Arrays.asList(annotation.types).contains(SearchType.ALL)) {
        wanted.add(field);
    }
}
于 2013-05-02T21:14:32.240 に答える