gpt4 book ai didi

java - 在 Java 中使用反射检索在创建对象时声明的 TYPE_USE 注释

转载 作者:行者123 更新时间:2023-11-30 10:05:27 25 4
gpt4 key购买 nike

使用 Java 8,如果我有这个 TYPE_USE注释:

@Target({ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}

我是这样使用它的:

MyObject obj = new @MyAnnotation("test") MyObject();

使用反射,如何在运行时从 obj 实例访问注解?

最佳答案

如果您打开 specification ,您可以看到您需要自定义编译器插件来处理它们:

因此,如 JSR 308 Explained: Java Type Annotations 中所述(Oracle) 文章(@请参阅“处理类型注释”一章),您必须编写自己的插件,或者尝试使用 Checker Framework。

您可以找到一个(理论上)最新的 Javadoc 到提到的 JSR 269 here .

我找到了教程here关于如何编写这个自定义插件,你需要一个类似这样的类:

@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 的使用不那么复杂,如果已经有适合您需要的插件。

关于java - 在 Java 中使用反射检索在创建对象时声明的 TYPE_USE 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com