![](/img/trans.png)
[英]Annotation retention policy: what real benefit is there in declaring `SOURCE` or `CLASS`?
[英]Annotation SOURCE Retention Policy
来自 Java 文档:
CLASS:注释由编译器记录在 class 文件中,但不需要由 VM 在运行时保留。
RUNTIME:注释由编译器记录在 class 文件中,并在运行时由 VM 保留,因此可以反射式读取。
SOURCE:注释将被编译器丢弃。
我了解 RUNTIME 的用法(以便使用带有反射的注释)和 CLASS(对于编译器)但我不明白什么时候可以使用它
@Retention(RetentionPolicy.SOURCE)
你可以解释吗?
像@SuppressWarnings,@ Override这样的东西是编译器使用的注释 - 在运行时不需要。 对于那些RetentionPolicy.SOURCE会有意义。 注释也可用于生成代码(查看Spring ROO) - 在运行时也不需要这样的注释。
这个答案非常有意义 - https://stackoverflow.com/a/43910948/3009968 。
您不希望包含一个依赖项,它的预期效果甚至在代码编译之前就已实现。 例如@SuppressWarnings
您不希望包含编译器用来生成代码但在运行时根本不需要的依赖项。 例如,如前一个答案中所述 - spring roo 。
RetentionPolicy.CLASS - 定义的注释将存储在.class文件中,但在运行时不可用。 如果您根本不指定任何保留策略,则这是默认保留策略。
RetentionPolicy.SOURCE - 编译器在构建代码时将忽略定义的注解。 因此注释仅在源代码中可用,在.class文件中不可用,在运行时也不可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.