@Deprecated
注释目标定义为:
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
另一方面,JavaDoc说:
在局部变量声明或参数声明或程序包声明上使用
@Deprecated
批注对编译器发出的警告无效。
在方法参数上可能需要@Deprecated
时可能发生的情况?
答案 0 :(得分:1)
原因是向后兼容。
在Java 5和6中,@Deprecated
没有@Target
元注释。
Java 7添加了具有相同效果的@Target
元注释。
如果注释类型
@Target
上没有T
元注释,则类型T
的注释可以被写为任何声明的修饰符,但类型参数声明除外
Oracle对永无休止的行为抱有幻想:在JDK 6下编译的任何代码也应在JDK 7下编译。如果某些地方的代码具有PARAMETER
,则包括诸如@Deprecated
之类的额外元素类型。在形式参数上。
在ANNOTATION_TYPE
元注释中缺少@Target
元素类型似乎是一个错误,但是实际上,以下代码在使用JDK 8或JDK 11时会编译:
@Deprecated
public @interface DeprecatedAnnotation { }