ZASTRZEŻENIE: Znam znaczenie i cel @Deprecated
.Co oznacza wyrażenie @Deprecated dla parametrów metody i zmiennych lokalnych?
Definicja @Deprecated
dopiskiem wygląda to w kodzie źródłowym Javy:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
Rozumiem cel posiadające wartości docelowe CONSTRUCTOR
, FIELD
, TYPE
, METHOD
i PACKAGE
.
Co to znaczy oznaczać parametr metody lub zmienną lokalną jako @Deprecated
?
Co dziwne, poniższy przykład kompiluje się bez ostrzeżeń.
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!
}
}
Czy jest to coś, co mogliby wdrożyć w przyszłości?
FWIW, Używam JDK 1.7.0_11 na Ubuntu 12.04 64bit. Wynik jest taki sam, niezależnie od tego, czy uruchamiam program z Eclipse, czy z wiersza poleceń.
Kompilator nie wypluć ostrzeżenia dla normalnego wykorzystania @Deprecated
, takie jak przy użyciu jednej z nieaktualnych konstruktorów klasy java.util.Date
. Wystarczy udowodnić, że nie mam uszkodzonego terminala lub skonfigurować, tu jest wyjście:
$ 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
Tylko dla ciekawości, jakiego kompilatora używasz? a kiedy piszesz "// bez ostrzeżenia" jesteś w IDE? – ThanksForAllTheFish
Trudno mi zrozumieć, co niezałożona metoda z przestarzałym argumentem może oznaczać ... – assylias