Loại bỏ cảnh báo nhập không dùng nữa trong Java


111

Trong Java, nếu bạn nhập một lớp không dùng nữa:

import SomeDeprecatedClass;

Bạn nhận được cảnh báo này: The type SomeDeprecatedClass is deprecated

Có cách nào để ngăn chặn cảnh báo này không?


4
Vâng, đó sẽ là lý tưởng, nhưng trong trường hợp này, tôi đang sử dụng một thư viện cho Hadoop sử dụng một phần API của nó mà gần đây đã không được dùng nữa, vì vậy tôi thực sự không có lựa chọn nếu muốn sử dụng thư viện này. Thêm vào đó, điều này chỉ dành cho một dự án trường học, không phải bất cứ thứ gì cần được duy trì.
Ed Mazur

Câu trả lời:


129

Sử dụng chú thích này trên lớp hoặc phương thức của bạn:

@SuppressWarnings( "deprecation" )

29
Điều này có hiệu quả với hàng nhập khẩu không? Tôi đã sử dụng chú thích đó trên các phương thức và các phương thức tương tự, nhưng nó dường như không được công nhận với nhập khẩu.
Ed Mazur

2
Việc sử dụng chú thích ở cấp độ lớp cũng phải bao gồm cả việc nhập. Nó thực hiện điều này ít nhất trong Eclipse (tốt, Rational Application Developer) đối với tôi nhưng tôi không chắc chắn về việc biên dịch dòng lệnh.
craigforster

20
Nó dường như không hoạt động với dòng lệnh "javac" hoặc tác vụ <javac> của kiến. Cờ -Xlint: -deprecation cũng không. Có vẻ như một lỗi javac.
Archie

1
Không hoạt động nếu việc ngừng sử dụng là một phần của trường tĩnh và SuppressWarnings cục bộ. Tên lớp đủ điều kiện có vẻ là cách tiếp cận tốt hơn ở đây.
mheinzerling,

16
Câu trả lời không nên ở trên cùng, vì câu hỏi là về câu lệnh "import" và bản sửa lỗi chỉ hoạt động cho Eclipse / Intellij (có vẻ như vậy theo các nhận xét), nhưng nguồn gốc cuối cùng của sự thật là javac mà bản sửa lỗi không hoạt động. Câu trả lời này thực sự trả lời cho câu hỏi: stackoverflow.com/a/20909204/2032701
Ruslan

179

Để tránh cảnh báo: không nhập lớp

thay vào đó hãy sử dụng tên lớp đủ điều kiện

và sử dụng nó ở càng ít địa điểm càng tốt.


15
+1 Đây phải là câu trả lời được chấp nhận. Nó có lợi ích là không loại bỏ sự phản đối trên toàn bộ lớp học.
k_g

11
Đây là câu trả lời tốt hơn, @SuppressWarningsở cấp độ lớp học không bao gồm nhập khẩu
Alex

7
Đây là câu trả lời tốt nhất cho đến Java 9, nơi nó cuối cùng đã được sửa: bug.openjdk.java.net/browse/JDK-8032211
Christopher

14

Khi bị hack, bạn không thể nhập và sử dụng tên đủ điều kiện bên trong mã.

Bạn cũng có thể thử javac -Xlint: -deprecation không chắc liệu điều đó có giải quyết được không.


9

Tôi đã giải quyết vấn đề này bằng cách thay đổi nhập thành:

import package.*

sau đó chú thích phương thức đã sử dụng các lớp không dùng nữa với@SuppressWarnings("deprecation")


Không nhập mọi thứ từ toàn bộ gói. Nó sẽ ảnh hưởng đến hiệu suất. Trình biên dịch không cần thiết sẽ tải tất cả các lớp sẽ dẫn đến vấn đề hiệu suất nghiêm trọng. Luôn tận dụng rằng các lớp không sử dụng không có trong quá trình nhập của bạn.
Arundev

1
Sử dụng bách khoa toàn thư làm ví dụ ở đây (vâng, tôi đã tự hẹn hò) - nếu bạn đang tìm kiếm thông tin về một con Đười ươi, bạn chỉ cần lấy cuốn sách 'O' hay lấy tất cả các cuốn sách?
Ascalonian

@Arundev, nói rõ ràng, những gì bạn đang nói là quá trình biên dịch có thể mất nhiều thời gian hơn để hoàn thành, nhưng trong thời gian chạy, điều này sẽ không có bất kỳ tác động nào đến hiệu suất của việc thực thi, phải không?
Paulo

@Paulo - đó là những gì đang cố gắng nói, nó sẽ kiểm tra tính khả dụng của các lớp được nhập, ngay cả khi nó không được sử dụng. Vì vậy, nếu bạn có nhiều hàng nhập khẩu không sử dụng luôn tốt hơn để loại bỏ điều đó.
Arundev

7

Giả sử rằng bạn đang ghi đè / triển khai một giao diện bằng một phương thức không được dùng nữa (chẳng hạn như getUnicodeStream (String columnLabel) trong java.sql.ResultSet) thì bạn sẽ không thoát khỏi cảnh báo không dùng nữa chỉ bằng cách sử dụng chú thích @SuppressWarnings ("phản đối") , trừ khi bạn cũng chú thích cùng một phương thức mới với chú thích @Deprecated. Điều này là hợp lý, vì nếu không, bạn có thể "hủy ghi nhận" một phương thức chỉ bằng cách ghi đè mô tả giao diện của nó.


Sự kết hợp "@SuppressWarnings" và "@Deprecated" này cũng hoạt động để gọi các phương thức không dùng nữa bên trong phương thức của riêng bạn.
Swav

1
Tôi đã tìm kiếm lời giải thích đó quá lâu. Cảm ơn bạn!
Jabari Dash

2

bạn có thể dùng:

javac FileName.java -Xlint: -deprecation

Nhưng sau đó, điều này sẽ cung cấp cho bạn cảnh báo và cũng cho bạn biết một phần của mã đang gây ra sự phản đối hoặc sử dụng API không được dùng nữa. Bây giờ bạn có thể chạy mã của mình với các cảnh báo này hoặc thực hiện các thay đổi thích hợp trong mã.

Trong trường hợp của tôi, tôi đang sử dụng someListItem.addItem("red color")trong khi trình biên dịch muốn tôi sử dụng someListItem.add("red color");.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.