如何获取使用特定注释注释的对象(非类)的所有字段和属性,而不通过所有其字段或属性描述符进行迭代?
我的目标是避免不必要的迭代通过显然甚至没有注释的每个字段或属性,例如getClass()或不是实例的字段或成员变量的类的任何字段。
或迭代是唯一的方法吗?没有其他更好的方法吗?
答案 0 :(得分:6)
您可以使用为您完成所有工作的reflections package。项目描述:
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;
}
});