Cách xóa phương thức không dùng nữa trong Java

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

Làm cách nào để loại bỏ các phương thức không dùng nữa trong Java?

Bạn có thể sử dụng chú thích @SuppressWarnings để chặn cảnh báo bất cứ khi nào mã đó được biên dịch. Đặt chú thích @SuppressWarnings tại phần khai báo của lớp, phương thức, trường hoặc biến cục bộ sử dụng API không dùng nữa.

Tại sao phương thức không được dùng trong Java?

Tương tự, khi một lớp hoặc phương thức không được dùng nữa, điều đó có nghĩa là lớp hoặc phương thức đó không còn được coi là quan trọng nữa . Trên thực tế, nó không quan trọng đến mức nó không còn được sử dụng nữa, vì nó có thể không còn tồn tại trong tương lai. Nhu cầu ngừng sử dụng xuất hiện vì khi một lớp phát triển, API của nó sẽ thay đổi.

Bạn có nên xóa mã không dùng nữa?

Thông thường, việc loại bỏ các phần phụ thuộc vào mã không dùng nữa không phải là ưu tiên đối với các nhóm phát triển muốn tập trung vào phát triển mới . Tuy nhiên, mã không dùng nữa không được xử lý có thể dẫn đến hỏng mã trong tương lai và cơ sở dữ liệu không hiệu quả.

Chủ Đề