注释源保留策略

2022-09-01 13:20:53

来自 Java 文档:

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

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

源:编译器将丢弃注释。

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

@Retention(保留策略.源)

你能解释一下吗?


答案 1

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


答案 2

这个答案非常有道理 - https://stackoverflow.com/a/43910948/3009968

您不希望包含依赖项,其预期效果甚至在编译代码之前就已实现。例如 @SuppressWarnings

您不希望包含编译器用来生成代码但在运行时根本不需要的依赖项。例如,正如在前面的答案中已经提到的 - 春天的roo