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

检索在Java中使用反射创建对象时声明的TYPE_USE注释,java,Java,使用Java 8,如果我有以下注释: @Target({ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value(); } 我是这样使用它的: MyObject obj = new @MyAnnotation("test") MyObject(); 使用反射,我如何在运行时从obj实例访问注释?如果打开,您可以看到您将需要自定义编译器

使用Java 8,如果我有以下注释:

@Target({ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value();
}
我是这样使用它的:

MyObject obj = new @MyAnnotation("test") MyObject();
使用反射,我如何在运行时从
obj
实例访问注释?

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

因此,正如(Oracle)文章(@请参阅“处理类型注释”一章)所述,您必须编写自己的插件,或者可以尝试使用Checker框架

您可以找到一个(理论上)最新的Javadoc,它与前面提到的jsr269相关

我找到了一个关于如何编写此自定义插件的教程,您需要一个类似的类,如下所示:

@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;
    }
}
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({com.example.MyAnnotation.class})
公共类MyAnnotationProcessor扩展了AbstractProcessor{
@凌驾

公共布尔过程(public boolean process,SetI)如果您能做到这一点,我会感到惊讶;注释将存储在哪里?对象没有自己的个人注释列表。您可以查看公共字段上的注释,但可能不会查看单个对象上的注释。