KHUYẾN CÁO: Tôi biết ý nghĩa và mục đích của @Deprecated
.@Deprecated có ý nghĩa gì đối với các tham số phương thức và biến cục bộ?
Định nghĩa của @Deprecated
chú thích trông như thế này trong mã nguồn của Java:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
tôi hiểu mục đích của việc có giá trị mục tiêu của CONSTRUCTOR
, FIELD
, TYPE
, METHOD
và PACKAGE
.
Tuy nhiên, ý nghĩa của việc đánh dấu tham số phương pháp hoặc biến cục bộ là @Deprecated
là gì?
Ví dụ dưới đây biên dịch mà không có bất kỳ cảnh báo nào.
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!
}
}
Đây có phải là điều họ có thể định thực hiện trong tương lai không?
FWIW, tôi sử dụng JDK 1.7.0_11 trên Ubuntu 12.04 64bit. Kết quả là như nhau cho dù tôi chạy chương trình từ Eclipse hay dòng lệnh.
Trình biên dịch không phun ra cảnh báo cho bình thường cách sử dụng @Deprecated
, chẳng hạn như sử dụng một trong các nhà thầu không được chấp nhận của lớp học java.util.Date
. Chỉ để chứng minh rằng tôi không có một thiết bị đầu cuối bị lỗi hoặc thiết lập, đây là kết quả:
$ 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
Chỉ vì sự tò mò, bạn đang sử dụng trình biên dịch nào? và khi bạn viết '// không có cảnh báo', bạn có nằm trong IDE không? – ThanksForAllTheFish
Tôi cố gắng để hiểu những gì một phương pháp không được chấp nhận với một đối số không được chấp nhận có thể có nghĩa là ... – assylias