从字段注释中获取传递的注释参数
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
我有两个注释,这个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