This question already has answers here:
Why the RetentionPolicy for @deprecated is RUNTIME?
                                
                                    (6个答案)
                                
                        
                                5年前关闭。
            
                    
以下是@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(标记注释)供程序员指示不鼓励使用此方法/字段/包...,然后为什么将RetentionPolicy设置为RUNTIME为什么不使用RetentionPolicy.CLASS用来?

最佳答案

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

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

关于java - 为什么将RetentionPolicy.RUNTIME用于@Deprecated注释? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25710846/

10-11 01:33