RetentionPolicy.SOURCE:在丢弃
  编译。这些注释不
  编译后有任何意义
  完成,所以他们不写
  字节码。
  示例:@Override@SuppressWarnings
  


如果以下名为MyAnno的注释未写入字节码(.class文件),如何在运行时访问它?例。

@Retention(RetentionPolicy.SOURCE)
@interface MyAnno {
    int a = 4;
    int val();
}

public class Example {

    public static void test() {
        System.out.println("MyAnno.a = " + MyAnno.a);
        MyAnno myAnno = new MyAnno() {
            public int val() {
                return 7;
            }
            public Class<? extends Annotation> annotationType() {
                return null;
            }
        };
        System.out.println("myAnno.val = " + myAnno.val());

        Override ov = new Override() {
            public Class<? extends Annotation> annotationType() {
                return null;
            }
        };
    }

    public static void main(String[] args) {
        test();
    }
}


上面的代码正在运行,没有任何错误。

最佳答案

RetentionPolicy是关于类的类文件的,您在其中添加了注释,而不是注释本身的类文件,例如

@MyAnno
public class TestClass {}


RetentionPolicy.SOURCE表示,如果将注释添加到类中,然后尝试使用TestClass.class.getAnnotations()获取该类的所有注释,则该注释将不属于结果。

07-24 21:07