免責聲明:我知道@Deprecated
的含義和用途。@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 64bit上使用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
只是爲了好奇心,你正在使用哪種編譯器?而當你寫'//無警告'時,你是否在IDE中? – ThanksForAllTheFish
我很努力去理解一個不贊成的方法和一個不贊成的參數可能意味着什麼...... – assylias