Sembunyikan peringatan impor yang tidak berlaku lagi di Java

111

Di Java, jika Anda mengimpor kelas yang tidak digunakan lagi:

import SomeDeprecatedClass;

Anda mendapatkan peringatan ini: The type SomeDeprecatedClass is deprecated

Apakah ada cara untuk menekan peringatan ini?

Ed Mazur
sumber
4
Ya itu akan ideal, tetapi dalam kasus ini saya menggunakan perpustakaan untuk Hadoop yang menggunakan sebagian dari API-nya yang baru-baru ini tidak digunakan lagi, jadi saya tidak benar-benar punya pilihan jika saya ingin menggunakan perpustakaan ini. Ditambah ini hanya untuk proyek sekolah, bukan apa pun yang perlu dipertahankan.
Ed Mazur

Jawaban:

129

Gunakan anotasi ini di kelas atau metode Anda:

@SuppressWarnings( "deprecation" )
craigforster
sumber
29
Apakah ini berfungsi dengan impor? Saya telah menggunakan anotasi itu pada metode dan semacamnya, tetapi tampaknya tidak dikenali dengan impor.
Ed Mazur
2
Penggunaan anotasi di tingkat kelas harus mencakup impor juga. Ini melakukan ini setidaknya dalam Eclipse (baik, Pengembang Aplikasi Rasional) untuk saya, tetapi saya tidak yakin tentang selama kompilasi baris perintah.
craigforster
20
Tampaknya tidak berfungsi dengan baris perintah "javac" atau tugas <javac> semut. Begitu pula dengan flag -Xlint: -deprecation. Sepertinya serangga javac.
Archie
1
Tidak berfungsi jika penghentian adalah bagian dari bidang statis dan SuppressWarnings lokal. Nama kelas yang sepenuhnya memenuhi syarat tampaknya menjadi pendekatan yang lebih baik di sini.
mheinzerling
16
Jawabannya tidak boleh di atas, karena pertanyaannya adalah tentang pernyataan "import" dan perbaikan hanya berfungsi untuk Eclipse / Intellij (sepertinya begitu menurut komentar), tetapi sumber kebenaran utamanya adalah javac yang memperbaikinya tidak bekerja. Jawaban ini benar-benar menjawab pertanyaan: stackoverflow.com/a/20909204/2032701
Ruslan
179

Untuk menghindari peringatan: jangan tidak mengimpor kelas

alih-alih gunakan nama kelas yang sepenuhnya memenuhi syarat

dan menggunakannya di lokasi sesedikit mungkin.

Kasper van den Berg
sumber
15
+1 Ini harus menjadi jawaban yang diterima. Ini memiliki keuntungan karena tidak menekan deprecation pada seluruh kelas.
k_g
11
Ini adalah jawaban yang lebih baik, @SuppressWarningsdi tingkat kelas tidak mencakup impor
Alex
7
Ini adalah jawaban terbaik hingga Java 9, yang akhirnya diperbaiki: bugs.openjdk.java.net/browse/JDK-8032211
Christopher
14

Sebagai hack Anda tidak dapat melakukan impor dan menggunakan nama yang memenuhi syarat di dalam kode.

Anda juga dapat mencoba javac -Xlint: -deprecation not sure apakah itu akan mengatasinya.

TofuBeer
sumber
9

Saya menyelesaikan ini dengan mengubah impor menjadi:

import package.*

lalu memberi anotasi metode yang menggunakan kelas yang dihentikan dengan@SuppressWarnings("deprecation")

Tim
sumber
Jangan mengimpor semuanya dari seluruh paket. Itu akan mempengaruhi kinerja. Kompilator yang tidak perlu akan memuat semua kelas akan mengakibatkan masalah kinerja yang serius. Selalu gunakan kelas yang tidak terpakai tidak ada dalam impor Anda.
Arundev
1
Menggunakan ensiklopedia sebagai contoh di sini (ya, saya berkencan dengan diri saya sendiri) - jika Anda mencari informasi tentang Orangutan, apakah Anda hanya mengambil buku 'O' atau mengambil semua bukunya?
Ascalonian
@Arundev, agar jelas, apa yang Anda katakan adalah bahwa kompilasi bisa memakan waktu lebih lama untuk diselesaikan, tetapi saat runtime, ini tidak akan berdampak pada kinerja eksekusi, bukan?
Paulo
@Paulo - itulah yang ingin saya katakan, itu akan memeriksa ketersediaan kelas yang diimpor, bahkan jika tidak digunakan. Jadi jika Anda memiliki banyak impor yang tidak terpakai selalu lebih baik untuk menghapusnya.
Arundev
7

Misalkan Anda mengganti / mengimplementasikan antarmuka dengan metode yang tidak digunakan lagi (seperti getUnicodeStream (String columnLabel) di java.sql.ResultSet) maka Anda tidak akan menghilangkan peringatan penghentian hanya dengan menggunakan anotasi @SuppressWarnings ("deprecation") , kecuali Anda juga menganotasi metode baru yang sama dengan anotasi @Deprecated. Ini logis, karena jika tidak, Anda dapat "membatalkan" metode hanya dengan menimpa deskripsi antarmukanya.

Per-Åke Minborg
sumber
Kombinasi "@SuppressWarnings" dan "@Deprecated" ini juga berfungsi untuk memanggil metode yang tidak digunakan lagi di dalam metode Anda sendiri.
Swav
1
Saya sudah lama mencari penjelasan itu. Terima kasih!
Jabari Dash
2

kamu bisa memakai:

javac FileName.java -Xlint: -deprecation

Tapi kemudian ini akan memberi Anda peringatan dan juga memberi tahu Anda bagian dari kode yang menyebabkan penghentian atau menggunakan API yang tidak digunakan lagi. Sekarang Anda dapat menjalankan kode Anda dengan peringatan ini atau membuat perubahan yang sesuai pada kode.

Dalam kasus saya, saya menggunakan someListItem.addItem("red color")sedangkan kompiler ingin saya gunakan someListItem.add("red color");.

Amit
sumber