Java getFieldsAnnotatedWith注释包含

Java getFieldsAnnotatedWith注释包含,java,reflection,annotations,Java,Reflection,Annotations,注释 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Searchable { SearchType[] types() default { SearchType.ALL }; } 某些方法中的反射 Reflections reflections = new Reflections(packageName); reflections.getFieldsAnnotatedWi

注释

@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
。我已经尝试过定义一个
新的Searchable(){…}
来传递这个方法。尽管这只会导致字段完全匹配。例如,仅包含
SearchType.ALL
。这样:

new Searchable() {
        @Override public SearchType[] types() { return { SearchType.ALL }; }
        @Override public Class<? extends Annotation> annotationType() { return Searchable.class; }
        }
newsearchable(){
@重写公共SearchType[]类型(){return{SearchType.ALL};}

@Override public Class我对Reflections API了解不多,但您只需使用可搜索批注对所有字段进行批注,然后检查其可搜索批注的类型是否包含SearchType。所有:

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);
    }
}
Set fields=reflections.getFieldsAnnotatedWith(Searchable.class);
需要设置=新的HashSet();
用于(字段:字段){
Searchable annotation=field.getAnnotation(Searchable.class);
if(Arrays.asList(annotation.types).contains(SearchType.ALL)){
需要。添加(字段);
}
}