注释来源保留政策

Joh*_*nGa 24 java reflection annotations

来自Java doc:

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

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

SOURCE:编译器将丢弃注释.

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

@Retention(RetentionPolicy.SOURCE)

你可以解释吗?

gka*_*mal 19

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

  • @JohnJohnGa,编译器只需要它立即编译的代码的SuppressWarnings和Override注释.不推荐使用需要CLASS或RUNTIME,因为它可能导致稍后编译的代码中的警告(使用它) (11认同)
  • 为什么不RetentionPolicy.CLASS? (6认同)
  • ByteCode(在.class文件中)不需要那些. (3认同)
  • +1:编译器使用的某些注释是CLASS保留. (2认同)