[英]Retrieving a TYPE_USE annotation declared when creating an Object, using reflection, in Java
使用 Java 8,如果我有这个TYPE_USE注释:
@Target({ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
我像这样使用它:
MyObject obj = new @MyAnnotation("test") MyObject();
使用反射,如何在运行时从obj
实例访问注释?
如果您打开规范,您会看到您需要使用自定义编译器插件来处理它们:
因此,如JSR 308 Explained: Java Type Annotations (Oracle) 文章(@see the Processing Type Annotations 章节)中所述,您必须要么编写自己的插件,要么尝试使用 Checker Framework。
您可以在此处找到提到的 JSR 269 的(理论上)最新的 Javadoc。
我在这里找到了一个关于如何编写这个自定义插件的教程,你将需要一个类似的类:
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({com.example.MyAnnotation.class})
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
//processing logic here
//returning false means other registered processor can still
//continue processing
return false;
}
}
不幸的是,您将需要创建一个 SPI 文件并且必须打包到 jar 中,因此要使其工作并非易事。
如果已经编写了适合您需要的插件,那么 Checker 框架的使用可能不那么复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.