java - 在 Java 中使用反射检索创建对象时声明的 TYPE_USE 注释
问题描述
使用 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 处理类型注释章节)中所述,您必须编写自己的插件,或者您可以尝试检查器框架。
您可以在此处找到提到的 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 Framework 的使用可能不那么复杂。
推荐阅读
- io - 使用 Chicken Scheme 的 `process` 连接到交互式工具?
- regex - 如何使用正则表达式来提取这样的网址
- unity3d - Unity3d does not open some windows
- algorithm - 多边形包含点算法解释
- python - How to "redirect" filesystem read/write calls without root and performance degradation?
- ios - In object-c, how to solve The data couldn’t be read because it isn’t in the correct format of http service
- php - convert iis web config to apache htaccess for laravel
- c# - Error connecting to Aurora during Entity Framework Core DB update
- powerbi - 从文件夹加载多个文件而不重复标题
- bit-manipulation - How to access the new x86 bit-manipulation instructions from Common Lisp?