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)){
需要。添加(字段);
}
}