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()
获取该类的所有注释,则该注释将不属于结果。