来自Java doc:
CLASS: 注释将由编译器记录在类文件中,但在运行时不需要由VM保留。
RUNTIME: 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
来源: 编译器将丢弃注释。
我理解RUNTIME的用法(为了使用带有反射的注释)和CLASS(用于编译器),但我不明白它什么时候可以使用
@Retention(RetentionPolicy.SOURCE)
你能解释一下吗?
答案 0 :(得分:18)
像@SuppressWarnings,@ Override这样的东西是编译器使用的注释 - 在运行时不需要。对于那些RetentionPolicy.SOURCE会有意义。也可以使用注释生成代码(查看Spring ROO) - 在运行时也不需要这样的注释。
答案 1 :(得分:0)
这个答案很合理-https://stackoverflow.com/a/43910948/3009968。
您不希望包含依赖项,即使在编译代码之前也可以实现期望的效果。例如。 @SuppressWarnings
您不希望包括编译器用来生成代码但在运行时完全不需要的依赖项。例如。如先前答案-spring roo中已经提到的。