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. 我尝试定义 anew Searchable() { ... }以使用此方法传递。尽管这只会导致完全匹配的字段。例如,仅包含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 回答