我知道Java注释有三种保留策略:
CLASS:注释将由编译器记录在类文件中,但在运行时不需要由VM保留。
RUNTIME:注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
SOURCE:编译器将丢弃注释。
虽然我了解他们的使用方案,但我不明白为什么指定保留策略存在的保留策略是如此重要。
我的意思是,为什么不是所有的注释都只是在运行时保留?它们是否会生成如此多的字节码/占用如此多的内存,以便将那些未声明的内容剥离为RUNTIME
确实会产生那么大的差异?
答案 0 :(得分:2)
保留策略SOURCE旨在帮助IDE,编译器以及可能的代码/ doc生成器利用注释。这些注释不构成编译类的一部分,并且被编译器丢弃,因此在运行时不可用。
例如,注释java.lang.SuppressWarnings
告诉编译器不要报告某些警告。
生成文档的注释可以是保留策略SOURCE。
答案 1 :(得分:1)
实际回答这个问题:减少依赖关系。如果没有区别,例如SOURCE和RUNTIME,"用户"这些类必须提供注释来自的所有依赖项。因此,仅因为IDE(SOURCE)使用该注释,就必须在运行时提供jar - 这是不必要的。如果您尝试从类中获取注释,其中没有提供实际提供注释的jar,您将获得未找到类的异常。