为什么RetentionPolicy.RUNTIME用于@Deprecated注释?

时间:2014-09-07 13:45:21

标签: java annotations

以下是@Deprecated注释的文档。

/**
 * A program element annotated @Deprecated is one that programmers
 * are discouraged from using, typically because it is dangerous,
 * or because a better alternative exists.  Compilers warn when a
 * deprecated program element is used or overridden in non-deprecated code.
 *
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

我的问题是: @Deprecated(标记注释)是程序员指示不鼓励使用此方法/字段/包...,为什么{{ 1}}设置为RetentionPolicy为什么不使用RUNTIME

1 个答案:

答案 0 :(得分:1)

Java中的反射可用于在运行时读取类的注释。如果使用RetentionPolicy.CLASS,那么@Deprecated注释将无法像这样阅读。

例如,反射程序可能会读取用户提供的类,并执行所有不推荐使用的静态方法而不带任何参数。也许有人可以提出一个比这更好的例子。单元测试框架可能会使用它的一些原因。