从字段注释中获取传递的注释参数

Get passed Annotation Parameters from Field Annotations

我有两个注释,这个class一个:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Processor {
  public String description() default "";
}

还有这个字段一:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ProcessorParameter {
    public String name() default "";
    public String value() default "";
    public String[] range() default {};
    public String description() default "";
}

他们都被用于 class 像这样:

    @Processor(description = "blabla")
    public class Prozessor1{
        @ProcessorParameter(description = "test3")
        public int parameter1;
        @ProcessorParameter(description = "test4")
        public int parameter2;
        @ProcessorParameter(description = "test5")
        public int parameter3;
    }

我有不同的 class 处理器,我希望能够访问处理器的所有参数和处理器参数注释。

现在我正在使用这个代码:

public static void main(String[] args) {
        Reflections ref = new Reflections();
        for (Class<?> cl:
                ref.getTypesAnnotatedWith(Processor.class)){
            Processor processor = cl.getAnnotation(Processor.class);
            System.out.printf("Found class: %s, with meta name: %s%n",
                    cl.getSimpleName(),processor.description());
            for(Field field : cl.getFields()) {
                System.out.printf("Found parameter: %s and %s%n",
                        field.getName(), field.getName());
            }
        }
    }

现在我得到这个结果:

Found class: Prozessor1, with meta name: blabla
Found parameter: parameter1 and parameter1
Found parameter: parameter2 and parameter2
Found parameter: parameter3 and parameter3

我显然不需要第二个 field.getName() 但我想访问传递的 ProcessorParameter 描述(“test3”/“test4”/“test5”)但我不知道如何访问它.

要访问 @ProcessorParameter 注释,您只需在第二个循环内的 field 对象上调用此方法 getAnnotation(Class<T> annotationClass)

for(Field field : cl.getFields()) {
    ProcessorParameter param = field.getAnnotation(ProcessorParameter.class);
}

注意: 如果字段中不存在给定注释,则此调用实际上会 return null