Không bao giờ sử dụng các trường, phương thức hoặc lớp không dùng nữa trong mã mới. Java cung cấp một chú thích @deprecated
để chỉ ra sự phản đối của các trường, phương thức và lớp cụ thể. Ví dụ: nhiều phương pháp của java.util.Date
, chẳng hạn như Date.getYear[]
, đã bị phản đối một cách rõ ràng. THI05-J. Không sử dụng chủ đề. stop[] để chấm dứt các luồng mô tả các sự cố có thể xảy ra do sử dụng phương thức Thread.stop[]
không dùng nữa.
Tài liệu Java SE cung cấp danh sách các API không dùng nữa cho từng phiên bản của ngôn ngữ
Các lập trình viên nên sử dụng danh sách các hàm không dùng nữa dành riêng cho phiên bản ngôn ngữ mà họ đang sử dụng, mặc dù cũng có thể tránh sử dụng các API không dùng nữa trong các phiên bản sau nếu có sẵn các lựa chọn thay thế phù hợp
Không nên sử dụng các trường, phương thức và lớp lỗi thời. Java thiếu bất kỳ chú thích nào cho biết lỗi thời; . Chẳng hạn, lớp java.util.Dictionary
được đánh dấu là lỗi thời;
Các phương thức và lớp lỗi thời
Không được sử dụng các phương thức và lớp được liệt kê trong bảng sau
Giao diện Java Virtual Machine Profiler [JVMPI] và Giao diện gỡ lỗi JVM [JVMDI] cũng không được dùng nữa và đã được thay thế bằng Giao diện công cụ JVM [JVMTI] [xem ENV05-J. Không triển khai một ứng dụng có thể được giám sát từ xa để biết thêm thông tin]
Sử dụng các lớp hoặc phương thức không dùng nữa hoặc lỗi thời trong mã chương trình có thể dẫn đến hành vi sai
Qui định
mức độ nghiêm trọng
khả năng
Chi phí khắc phục
Sự ưu tiên
Cấp độ
MET02-J
Thấp
không chắc
Trung bình
P2
L3
Việc phát hiện việc sử dụng các phương pháp không dùng nữa rất đơn giản. Các phương pháp lỗi thời không có phương tiện phát hiện tự động
Chi tiết triển khai Android
SDK Android có API không dùng nữa và lỗi thời. Ngoài ra, có thể tồn tại các API không tương thích tùy thuộc vào phiên bản SDK. Do đó, các nhà phát triển nên tham khảo "Báo cáo về sự khác biệt của API Android" và xem xét thay thế các API không dùng nữa
Trong hướng dẫn nhanh này, chúng ta sẽ xem xét các API không dùng nữa trong Java và cách sử dụng chú thích @Deprecated
2. Chú thích @Không dùng nữa
Khi một dự án phát triển, API của nó sẽ thay đổi. Theo thời gian, có một số hàm tạo, trường, loại hoặc phương thức nhất định mà chúng tôi không muốn mọi người sử dụng nữa
Thay vì phá vỡ khả năng tương thích ngược của API của dự án, chúng ta có thể gắn thẻ các phần tử này bằng chú thích @Deprecated
@Deprecated nói với các nhà phát triển khác rằng phần tử được đánh dấu sẽ không còn được sử dụng nữa. Thông thường, người ta cũng thêm một số Javadoc bên cạnh chú thích @Deprecated để giải thích đâu sẽ là giải pháp thay thế tốt hơn phục vụ đúng hành vi
public class Worker {
/**
* Calculate period between versions
* @deprecated
* This method is no longer acceptable to compute time between versions.
* Use {@link Utils#calculatePeriod[Machine]} instead.
*
* @param machine instance
* @return computed time
*/
@Deprecated
public int calculate[Machine machine] {
return machine.exportVersions[].size[] * 10;
}
}
Hãy nhớ rằng trình biên dịch chỉ hiển thị cảnh báo API không dùng nữa nếu phần tử Java được chú thích được sử dụng ở đâu đó trong mã. Vì vậy, trong trường hợp này, nó sẽ chỉ hiển thị nếu có mã được gọi là phương thức tính toán
Ngoài ra, chúng ta cũng có thể truyền đạt trạng thái không dùng nữa trong tài liệu bằng cách sử dụng thẻ Javadoc @deprecated
3. Thuộc tính tùy chọn được thêm vào trong Java 9
Java 9 thêm một số thuộc tính tùy chọn vào chú thích @Deprecated. kể từ và cho Loại bỏ
Thuộc tính since yêu cầu một chuỗi cho phép chúng tôi xác định phiên bản mà phần tử không được dùng nữa. Giá trị mặc định là một chuỗi rỗng
Và forRemoval là một boolean cho phép chúng tôi chỉ định liệu phần tử có bị xóa trong bản phát hành tiếp theo hay không. Giá trị mặc định của nó là sai
public class Worker {
/**
* Calculate period between versions
* @deprecated
* This method is no longer acceptable to compute time between versions.
* Use {@link Utils#calculatePeriod[Machine]} instead.
*
* @param machine instance
* @return computed time
*/
@Deprecated[since = "4.5", forRemoval = true]
public int calculate[Machine machine] {
return machine.exportVersions[].size[] * 10;
}
}
Nói một cách đơn giản, cách sử dụng ở trên có nghĩa là phép tính không được dùng nữa kể từ 4. 5 trong thư viện của chúng tôi và nó đã được lên lịch xóa trong bản phát hành chính tiếp theo
Việc thêm giá trị này sẽ hữu ích cho chúng tôi vì trình biên dịch sẽ đưa ra cảnh báo mạnh mẽ hơn cho chúng tôi nếu trình biên dịch phát hiện ra rằng chúng tôi đang sử dụng một phương thức có giá trị đó
Và đã có sự hỗ trợ từ các IDE để phát hiện việc sử dụng một phương thức được đánh dấu bằng forRemoval=true. Ví dụ: IntelliJ sẽ đánh mã bằng một đường màu đỏ thay vì màu đen
4. Phần kết luận
Trong bài viết nhanh này, chúng ta đã biết cách sử dụng chú thích @Deprecated và các thuộc tính tùy chọn của nó để đánh dấu mã không còn được sử dụng nữa