如何获取使用特定注释注释的对象的所有字段和属性?

sup*_*sky 6 java reflection

如何获取使用特定注释注释的对象(而不是类)的所有字段和属性,而不迭代其所有字段或属性描述符?

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

或迭代是唯一的方法吗?没有其他更好的方法吗?

dac*_*cwe 6

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

Reflections会扫描您的类路径,索引元数据,允许您在运行时查询它,并可以为项目中的许多模块保存和收集该信息.

使用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; 
                }
            });
Run Code Online (Sandbox Code Playgroud)