免責事項: の意味と目的を理解してい@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から実行してもコマンドラインから実行しても、結果は同じです。
コンパイラは、クラスの推奨されないコンストラクタの 1 つを使用するなど、の通常の使用に対して警告を吐き出します。端末やセットアップに問題がないことを証明するために、出力は次のとおりです。@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