注释来源保留政策

时间:2011-11-08 10:23:53

标签: java reflection annotations

来自Java doc:

CLASS:     注释将由编译器记录在类文件中,但在运行时不需要由VM保留。

RUNTIME:     注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。

来源:     编译器将丢弃注释。

我理解RUNTIME的用法(为了使用带有反射的注释)和CLASS(用于编译器),但我不明白它什么时候可以使用

  

@Retention(RetentionPolicy.SOURCE)

你能解释一下吗?

2 个答案:

答案 0 :(得分:18)

像@SuppressWarnings,@ Override这样的东西是编译器使用的注释 - 在运行时不需要。对于那些RetentionPolicy.SOURCE会有意义。也可以使用注释生成代码(查看Spring ROO) - 在运行时也不需要这样的注释。

答案 1 :(得分:0)

这个答案很合理-https://stackoverflow.com/a/43910948/3009968

您不希望包含依赖项,即使在编译代码之前也可以实现期望的效果。例如。 @SuppressWarnings

您不希望包括编译器用来生成代码但在运行时完全不需要的依赖项。例如。如先前答案-spring roo中已经提到的。