在方法参数上使用@Deprecated的原因是什么?

时间:2020-01-04 23:01:43

标签: java annotations deprecated

@Deprecated注释目标定义为:

@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})

另一方面,JavaDoc说:

在局部变量声明或参数声明或程序包声明上使用@Deprecated批注对编译器发出的警告无效。

在方法参数上可能需要@Deprecated时可能发生的情况?

1 个答案:

答案 0 :(得分:1)

原因是向后兼容。

在Java 5和6中,@Deprecated没有@Target元注释。 Java 7添加了具有相同效果的@Target元注释。

根据@Target documentation

如果注释类型@Target上没有T元注释,则类型T的注释可以被写为任何声明的修饰符,但类型参数声明除外

Oracle对永无休止的行为抱有幻想:在JDK 6下编译的任何代码也应在JDK 7下编译。如果某些地方的代码具有PARAMETER,则包括诸如@Deprecated之类的额外元素类型。在形式参数上。

ANNOTATION_TYPE元注释中缺少@Target元素类型似乎是一个错误,但是实际上,以下代码在使用JDK 8或JDK 11时会编译:

@Deprecated
public @interface DeprecatedAnnotation { }