免责声明:我知道@Deprecated
.
@Deprecated
Java 源码中注解的定义是这样的:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
我理解目标值为CONSTRUCTOR
、FIELD
、TYPE
和METHOD
的目的PACKAGE
。
但是,将方法参数或局部变量标记为 是什么意思@Deprecated
?
奇怪的是,下面的示例编译时没有任何警告。
interface Doable {
void doIt(@Deprecated Object input);
}
class Action implements Doable {
@Override
public void doIt(@Deprecated Object input) {
String string = String.valueOf(input); // no warning!
@Deprecated
String localVariable = "hello";
System.out.println("Am I using a deprecated variable?" + localVariable); // no warning!
}
}
这是他们可能打算在未来实施的事情吗?
FWIW,我在 Ubuntu 12.04 64 位上使用 JDK 1.7.0_11。无论我是从 Eclipse 还是命令行运行程序,结果都是一样的。
编译器确实会针对 的正常使用发出警告@Deprecated
,例如使用java.util.Date
类的已弃用构造函数之一。只是为了证明我没有错误的终端或设置,这里是输出:
$ javac com/adarshr/Test.java -Xlint:deprecation
com/adarshr/Test.java:12: warning: [deprecation] Date(int,int,int) in Date has been deprecated
new Date(2013, 1, 31);
^
1 warning
$
$ javac -version
javac 1.7.0_11