注释保留政策:在声明“SOURCE”或“CLASS”时有什么真正的好处?

时间:2014-08-22 16:41:00

标签: java annotations

我知道Java注释有三种保留策略:

  

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

     

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

     

SOURCE:编译器将丢弃注释。

虽然我了解他们的使用方案,但我不明白为什么指定保留策略存在的保留策略是如此重要。

我的意思是,为什么不是所有的注释都只是在运行时保留?它们是否会生成如此多的字节码/占用如此多的内存,以便将那些未声明的内容剥离为RUNTIME确实会产生那么大的差异?

2 个答案:

答案 0 :(得分:2)

保留策略SOURCE旨在帮助IDE,编译器以及可能的代码/ doc生成器利用注释。这些注释不构成编译类的一部分,并且被编译器丢弃,因此在运行时不可用。

例如,注释java.lang.SuppressWarnings告诉编译器不要报告某些警告。

生成文档的注释可以是保留策略SOURCE。

答案 1 :(得分:1)

实际回答这个问题:减少依赖关系。如果没有区别,例如SOURCE和RUNTIME,"用户"这些类必须提供注释来自的所有依赖项。因此,仅因为IDE(SOURCE)使用该注释,就必须在运行时提供jar - 这是不必要的。如果您尝试从类中获取注释,其中没有提供实际提供注释的jar,您将获得未找到类的异常。