Pertanyaan Apakah salah menggunakan metode atau kelas Deprecated di Java?


Saya menggunakan gerhana untuk mengembangkan aplikasi web. Baru hari ini saya telah memperbarui versi struts saya dengan mengubah file JAR. Saya mendapatkan peringatan di beberapa tempat bahwa metode tidak lagi digunakan, tetapi kode berfungsi dengan baik.

Saya ingin tahu beberapa hal

  1. Apakah salah menggunakan metode atau kelas Deprecated di Java?

  2. Bagaimana jika saya tidak mengubah metode apa pun dan menjalankan aplikasi saya dengan peringatan yang saya miliki, akankah itu membuat masalah kinerja apa pun.


140
2018-05-31 07:05


asal


Jawaban:


1. Apakah salah menggunakan metode atau kelas Deprecated di Java?

Dari definisi usang:

Elemen program yang diberi catatan @Deprecated adalah yang tidak disarankan oleh pemrogram, biasanya karena berbahaya, atau karena alternatif yang lebih baik ada.

Metode ini disimpan di API untuk kompatibilitas ke belakang untuk jangka waktu yang tidak ditentukan, dan mungkin di rilis mendatang akan dihapus. Artinya, tidak, tidak salah, tetapi ada cara yang lebih baik untuk melakukannya, yang lebih tangguh terhadap perubahan API.

2. Bagaimana jika saya tidak mengubah metode apa pun dan menjalankan aplikasi saya dengan peringatan yang saya miliki, akankah itu menciptakan masalah kinerja apa pun.

Kemungkinan besar tidak. Ini akan terus berfungsi seperti sebelum penghentian. Kontrak metode API tidak akan berubah. Jika beberapa struktur data internal berubah sesuai dengan metode baru yang lebih baik, mungkin ada dampak kinerja, tetapi sangat tidak mungkin.


Itu penghilangan paling lucu di API Java, adalah imo, the FontMetrics.getMaxDecent. Alasan penghentian: Kesalahan ejaan.

Tidak berlaku lagi. Pada JDK versi 1.1.1, digantikan oleh getMaxDescent ().


247
2018-05-31 07:07



Anda masih dapat menggunakan kode yang tidak berlaku lagi tanpa kinerja yang diubah, tetapi seluruh titik penghentian metode / kelas adalah membiarkan pengguna tahu sekarang ada cara yang lebih baik untuk menggunakannya, dan bahwa di masa mendatang, rilis kode yang tidak lagi digunakan cenderung dihapus.


27
2018-05-31 07:14



Terminologi

Dari glosarium resmi Sun:

bantahan: Mengacu pada kelas, antarmuka, konstruktor, metode atau bidang yang tidak lagi disarankan, dan mungkin tidak ada lagi di versi mendatang.

Dari panduan how-and-when to deprecate:

Anda mungkin pernah mendengar istilah, "humor yang mencela diri sendiri," atau humor yang meminimalkan kepentingan pembicara. Kelas atau metode yang tidak lagi berlaku seperti itu. Itu tidak lagi penting. Sangat tidak penting, pada kenyataannya, bahwa Anda seharusnya tidak lagi menggunakannya, karena telah digantikan dan mungkin tidak ada lagi di masa depan.

Itu @Deprecated anotasi melangkah lebih jauh dan memperingatkan bahaya:

Elemen program dianotasi @Deprecated adalah salah satu programmer yang tidak disarankan untuk menggunakannya, biasanya karena itu berbahaya, atau karena alternatif yang lebih baik ada.

Referensi


Benar atau salah?

Pertanyaan tentang apakah benar atau salah menggunakan metode usang akan harus diperiksa secara individual. Di sini adalah SEMUA tanda kutip di mana kata itu "tidak berlaku lagi" muncul di Java 2nd Edition efektif:

Butir 7: Hindari finalizers: Satu-satunya metode yang mengklaim untuk menjamin finalisasi adalah System.runFinalizersOnExit dan saudara kembarnya yang jahat Runtime.runFinalizersOnExit. Metode-metode ini cacat fatal dan tidak lagi digunakan.

Butir 66: Sinkronisasi akses ke data bersama yang bisa berubah: Perpustakaan menyediakan Thread.stop metode, tetapi metode ini sudah ditinggalkan lama karena itu secara inheren tidak aman - penggunaannya dapat menyebabkan korupsi data.

Butir 70: Keamanan utas dokumen: The System.runFinalizersOnExit metode ini tidak bermusuhan dan sudah tidak digunakan lagi.

Butir 73: Hindari grup utas: Mereka memungkinkan Anda untuk menerapkan tertentu Thread primitif ke sekelompok utas sekaligus. Beberapa primitif ini sudah tidak digunakan lagi, dan sisanya jarang digunakan. [...] kelompok benang sudah usang.

Jadi setidaknya dengan semua metode di atas, jelas salah untuk menggunakannya, setidaknya menurut Josh Bloch.

Dengan metode lain, Anda harus mempertimbangkan masalah secara individual, dan memahami MENGAPA mereka ditinggalkan, tetapi secara umum, ketika keputusan untuk mencela dibenarkan, itu akan cenderung bersandar ke arah yang salah dari kanan untuk terus menggunakannya.

Pertanyaan-pertanyaan Terkait


19
2018-05-31 07:16



Selain semua tanggapan luar biasa di atas saya menemukan ada alasan lain untuk menghapus panggilan API yang tidak lagi digunakan.

Jadilah meneliti mengapa panggilan tidak lagi saya sering menemukan diri saya belajar hal-hal menarik tentang Java / API / Kerangka. Sering ada alasan bagus mengapa suatu metode tidak lagi digunakan dan memahami alasan-alasan ini mengarah pada wawasan yang lebih mendalam.

Jadi dari perspektif pembelajaran / pertumbuhan, ini juga merupakan upaya yang berharga


17
2018-05-31 07:07



Ini tentu tidak menciptakan masalah kinerja - tidak lagi digunakan berarti di masa depan kemungkinan fungsi itu tidak akan menjadi bagian dari perpustakaan lagi, jadi Anda harus menghindari menggunakannya dalam kode baru dan mengubah kode lama Anda untuk berhenti menggunakannya, sehingga Anda tidak mengalami masalah satu hari ketika Anda meningkatkan struts dan temukan fungsi itu tidak lagi hadir


10
2017-08-20 14:27



Anda mungkin pernah mendengar istilah "humor yang mencela diri sendiri". Itulah humor yang meminimalkan kepentingan Anda. Kelas atau metode yang tidak lagi berlaku seperti itu. Itu tidak lagi penting. Hal ini sangat tidak penting, pada kenyataannya, bahwa itu seharusnya tidak lagi digunakan sama sekali, karena mungkin tidak akan ada lagi di masa depan.

Cobalah untuk menghindarinya 


8
2018-05-31 07:07



Itu tidak salah, hanya saja tidak disarankan. Ini pada umumnya berarti bahwa pada titik ini ada cara yang lebih baik dalam melakukan sesuatu dan Anda akan berbuat baik jika Anda menggunakan cara baru yang ditingkatkan. Beberapa hal yang tidak lagi benar-benar berbahaya dan harus dihindari sama sekali. Cara baru dapat menghasilkan kinerja yang lebih baik daripada yang sudah ditinggalkan, tetapi tidak selalu demikian.


7
2018-05-31 07:11



  1. Umumnya tidak, itu tidak sepenuhnya salah untuk digunakan deprecated metode selama Anda memiliki rencana kontingensi yang baik untuk menghindari masalah jika / ketika metode tersebut menghilang dari perpustakaan yang Anda gunakan. Dengan Java API sendiri hal ini tidak pernah terjadi tetapi hanya dengan hal lain itu berarti bahwa itu akan dihapus. Jika Anda secara khusus berencana untuk tidak meningkatkan (meskipun Anda kemungkinan besar harus dalam jangka panjang) perpustakaan pendukung perangkat lunak Anda maka tidak ada masalah dalam menggunakan deprecated metode.
  2. Tidak.

4
2017-08-26 13:30



Ya, itu salah.

Metode atau kelas yang tidak digunakan lagi akan dihapus di versi Java yang akan datang dan sebaiknya tidak digunakan. Dalam setiap kasus, harus ada alternatif yang tersedia. Gunakan itu.

Ada beberapa kasus ketika Anda harus menggunakan kelas atau metode yang ditinggalkan untuk memenuhi tujuan proyek. Dalam hal ini, Anda benar-benar tidak punya pilihan selain menggunakannya. Versi masa depan Java mungkin melanggar kode itu, tetapi jika itu adalah persyaratan Anda harus hidup dengan itu. Mungkin ini bukan pertama kalinya Anda melakukan kesalahan untuk memenuhi persyaratan proyek, dan tentu saja ini bukan yang terakhir.

Saat Anda meningkatkan ke versi baru Java atau beberapa pustaka lain, terkadang metode atau kelas yang Anda gunakan menjadi usang. Metode usang tidak didukung, tetapi seharusnya tidak menghasilkan hasil yang tidak diharapkan. Itu tidak berarti bahwa mereka tidak akan, jadi ganti kode Anda SECEPATNYA.

Proses penghentian ada untuk memastikan bahwa penulis memiliki cukup waktu untuk mengubah kode mereka dari API lama ke API baru. Manfaatkan waktu ini. Ubah kode Anda ke ASAP.


3
2018-05-31 07:08