以下是@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
?
答案 0 :(得分:1)
Java中的反射可用于在运行时读取类的注释。如果使用RetentionPolicy.CLASS
,那么@Deprecated
注释将无法像这样阅读。
例如,反射程序可能会读取用户提供的类,并执行所有不推荐使用的静态方法而不带任何参数。也许有人可以提出一个比这更好的例子。单元测试框架可能会使用它的一些原因。