[英]How to get custom annotation from source code in java?
我正在尝试使用自定义注释来获取一些用于单元测试的统计信息。 另一个人定义了一个自定义注释,如下所示:
@Retention(RetentionPolicy.SOURCE)
@Target( { ElementType.METHOD, ElementType.TYPE})
public @interface TimsID {
String id();
String description() default "";
}
我需要做的是从项目中的所有单元测试中提取此批注。
问题来了:
RetentionPolicy定义为SOURCE
,我不知道如何在单元测试中获取它。
我知道如果它是RUNTIME
,则可能会像这样反省地读取:
Class<TestExample> obj = TestExample.class;
// Process @TimsID
if (obj.isAnnotationPresent(TimsID.class)) {
Annotation annotation = obj.getAnnotation(TimsID.class);
TimsID TimsID = (TimsID) annotation;
}
但是现在是“ SOURCE”,注释将不会由编译器记录在类文件中,也不会在运行时由VM保留,因此无法进行反射式读取。
定义自定义注释的人说,他之所以选择“源”,是因为我们只需要在源代码中统计此注释,就不需要在类文件甚至运行时中编写这些自定义注释,因此我们需要进行注释分析仅在源代码中。
我已经完成了这项工作, 这是步骤和代码 。
源保留旨在仅在编译过程中使用。 您可以查看APT(注释处理工具)以获取有关如何执行这种编译时注释处理逻辑的更多信息。 (但是我想知道它是否可以满足您的要求)
不幸的是,您必须在源代码中更改RetentionPolicy
。 没有其他方法可以使注释在运行时甚至在测试中也可以反射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.