注释来源保留政策

来自Java doc:

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

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

SOURCE:编译器将丢弃注释。

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

@Retention(RetentionPolicy.SOURCE)

你可以解释吗?

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