9

如何在不遍历其所有字段或属性描述符的情况下获取使用特定注释注释的对象(不是类)的所有字段和属性?

我的目标是避免对显然甚至没有注释的每个字段或属性进行不必要的迭代,例如 getClass() 或不是实例的字段或成员变量的类的任何字段。

还是迭代是唯一的出路?没有其他更好的方法可以做到这一点吗?

4

1 回答 1

6

您可以使用为您完成所有工作的反射包。项目描述:

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; 
                }
            });
于 2012-12-14T08:33:24.417 回答