Apakah ada alasan bagus untuk menghindari pernyataan impor yang tidak digunakan di Java? Seperti yang saya pahami, mereka ada untuk kompiler, jadi banyak impor yang tidak digunakan tidak akan berdampak pada kode yang dikompilasi. Apakah itu hanya untuk mengurangi kekacauan dan untuk menghindari konflik penamaan di kemudian hari?
(Saya bertanya karena Eclipse memberikan peringatan tentang impor yang tidak digunakan, yang agak mengganggu ketika saya mengembangkan kode karena saya tidak ingin menghapus impor sampai saya cukup yakin saya selesai mendesain kelas.)
sumber
ctrl+3
(setidaknya pada windwos) dan kemudian mengetik impor. Ini jelas lebih lambat dari ctrl + shift + O tetapi ini adalah cara untuk menemukannya dengan cepat (dan banyak tindakan lain yang Anda ingat atau coba temukan) bahkan jika Anda tidak ingat pintasan khusus untuk ini.Salah satunya adalah jika Anda menghapus kelas yang direferensikan oleh impor dari classpath, Anda tidak akan mendapatkan kesalahan kompiler konyol yang tidak memiliki tujuan. Dan Anda tidak akan mendapatkan positif palsu saat melakukan penelusuran "di mana digunakan".
Lainnya (tapi ini akan sangat spesifik di alam) akan terjadi jika impor yang tidak digunakan memiliki konflik penamaan dengan impor lain, menyebabkan Anda menggunakan nama yang sepenuhnya memenuhi syarat secara tidak perlu.
Tambahan: Hari ini server build mulai gagal dalam kompilasi (bahkan pengujian tidak berjalan) dengan kesalahan memori habis. Itu berjalan dengan baik selamanya dan check-in tidak memiliki perubahan apa pun pada proses pembuatan atau penambahan signifikan yang dapat menjelaskan hal ini. Setelah mencoba meningkatkan pengaturan memori (ini menjalankan 64 bit JVM pada 64 bit CentOS!) Ke sesuatu yang jauh melampaui tempat klien dapat mengkompilasi, saya memeriksa check in satu per satu.
Ada impor yang tidak tepat yang telah digunakan dan ditinggalkan oleh pengembang (mereka menggunakan kelas, mengimpornya secara otomatis, dan kemudian menyadari bahwa itu adalah kesalahan). Impor yang tidak terpakai itu menarik seluruh tingkatan aplikasi yang terpisah, yang, meskipun IDE tidak dikonfigurasi untuk memisahkannya, proses build-nya. Impor tunggal itu menyeret begitu banyak kelas sehingga kompilator berusaha untuk mengompilasi tanpa perpustakaan dependen yang relevan di classpath, hal ini menyebabkan begitu banyak masalah yang menyebabkan kesalahan kehabisan memori. Butuh waktu satu jam untuk mengatasi masalah ini yang disebabkan oleh impor yang tidak terpakai.
sumber
Dari sudut pandang yang murni, ketergantungan apa pun adalah "kendala" pada produk dan dengan demikian dapat menyebabkan masalah perawatan di kemudian hari.
Sebagai contoh, anggaplah program Anda menggunakan kelas com.XYZObjectPool, dan kemudian Anda memutuskan untuk tidak menggunakannya tetapi tidak pernah menghapus impor. Jika orang lain sekarang ingin membuat instance org.WVYObjectPool dan hanya merujuk ke ObjectPool, mereka tidak mendapatkan peringatan apa pun tentang hal itu sampai suatu saat ada masalah casting atau masalah pemanggilan.
Omong-omong, ini bukan skenario yang tidak realistis. Setiap kali Anda meminta Eclipse menanyakan versi X mana yang ingin Anda impor, dan Anda memilih satu dari banyak paket, adalah skenario di mana jika Anda telah mengimpor di sana, Anda mungkin mendapatkan pilihan yang salah tanpa mengetahuinya.
Apa pun itu, Anda dapat meminta Eclipse untuk membersihkannya untuk Anda
sumber
Peringatan? Minta Eclipse untuk membersihkannya secara otomatis untuk Anda. Itulah yang dilakukan IntelliJ. Jika cukup pintar untuk memperingatkan Anda, itu harus cukup pintar untuk membersihkannya. Saya akan merekomendasikan mencari pengaturan Eclipse untuk memberitahunya untuk berhenti menjadi cerewet dan melakukan sesuatu.
sumber
Ini ada hubungannya dengan kejelasan program yang berguna untuk pemeliharaan.
Jika Anda harus mempertahankan program, Anda akan menemukan betapa bermanfaatnya memiliki impor kelas tunggal per baris.
Pikirkan tentang skenario berikut ini:
Saat Anda memperbaiki bug atau memelihara bagian kode (atau hanya membacanya), sangat membantu bagi pembaca untuk mengetahui paket mana yang dimiliki kelas yang digunakan. Menggunakan impor karakter pengganti seperti yang ditunjukkan di atas tidak membantu untuk tujuan itu.
Bahkan dengan IDE, Anda tidak ingin mengarahkan atau melompat ke deklarasi dan kembali, akan lebih mudah jika Anda memahami dari segi fungsionalitas, paket dan kelas lain yang bergantung pada kode saat ini.
Jika ini untuk proyek pribadi atau sesuatu yang kecil, itu benar-benar tidak masalah, tetapi untuk sesuatu yang lebih besar yang harus digunakan oleh pengembang lain (dan dipertahankan selama bertahun-tahun) ini HARUS DIMILIKI.
Sama sekali tidak ada perbedaan kinerja dengan apapun.
sumber
FYI, Ini menarik perhatian saya, karena saya tidak berpikir impor terorganisir benar-benar menghapus impor yang tidak digunakan, saya pikir itu hanya menyortirnya.
Menghapus impor secara otomatis selama operasi penyimpanan membuat saya sedih ketika misalnya, selama pengembangan atau pengujian Anda memiliki masalah dan mengomentari beberapa kode, ketika Anda menyimpannya, impor yang digunakan oleh bagian kode yang diberi komentar dihapus. Terkadang ini bukan masalah karena Anda dapat membatalkan ( Ctrl+ Z) perubahan, tetapi di lain waktu tidak sesederhana itu karena Anda mungkin telah membuat perubahan lain. Saya juga mengalami masalah ketika saya menghapus komentar kode (saya sebelumnya telah berkomentar lalu menyimpan, sehingga menghapus impor untuk kode itu), secara otomatis mencoba menebak impor yang diperlukan dan mengambil yang salah (misalnya saya pikir saya memiliki
StringUtils
kelas yang digunakan dan mengambil kelas lain dengan nama yang sama dari perpustakaan yang salah).Saya lebih suka mengatur impor secara manual daripada menjadikannya sebagai tindakan penyimpanan.
sumber
Untuk gerhana saya menggunakan ini: jendela -> preferensi -> java -> editor -> simpan tindakan -> centang kotak centang untuk mengatur impor (ada banyak hal berguna lainnya di sana juga, seperti pemformatan, membuat bidang final dan sebagainya. .). Jadi, ketika saya menyimpan file saya, gerhana menghapus impor yang tidak terhapus untuk saya. Menurut pendapat saya, jika Anda tidak membutuhkan sesuatu maka keluarkan (atau biarkan dihapus oleh gerhana).
sumber
Anda dapat mengomentari pernyataan impor yang tidak digunakan dan peringatan tidak akan mengganggu Anda, tetapi Anda dapat melihat apa yang Anda miliki.
sumber
Tidak ada dampak kinerja apa pun, meski untuk keterbacaan Anda bisa membuatnya bersih. Menghapus impor yang tidak digunakan cukup mudah di Eclipse dan IntelliJ IDEA.
Gerhana
Windows / Linux - Ctrl+ Shift+O
Mac - Cmd+ Shift+O
IntelliJ IDEA atau Android Studio
Windows / Linux - Ctrl+ Alt+O
Mac - Cmd+ Alt+O
sumber
Saya membaca di suatu tempat, beberapa tahun yang lalu, bahwa setiap kelas yang diimpor akan dimuat saat runtime dengan kelas pengimpor. Jadi menghapus yang tidak terpakai, terutama seluruh paket, akan mengurangi overhead memori. Meskipun saya kira bahwa versi java modern berurusan dengan itu, jadi mungkin itu bukan alasan lagi.
Dan omong-omong, dengan eclipse Anda dapat menggunakan Ctrl+ Shift+ Ountuk mengatur impor, tetapi Anda juga dapat mengkonfigurasi "pembersih" yang menangani hal-hal seperti itu (dan banyak lainnya) setiap kali Anda menyimpan file java.
sumber
Bagi saya, satu impor kelas yang tidak terpakai di kelas pengontrol membuat masalah kompilasi di Jenkins build setelah saya menghapus kelas yang diimpor selama pembersihan kode dan melakukan penghapusan di git tanpa menguji build di lokal.
sumber