ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я знаю смысл и назначение @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, я использую JDK 1.7.0_11 на Ubuntu 12.04 64bit. Результат тот же, независимо от того, запускаю ли я программу из 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