Bagaimana cara mendeklarasikan atau menandai metode Java sebagai usang?

284

Saya ingin membuat salah satu metode saya "usang" = tidak digunakan lagi.

Tapi saya tetap ingin memilikinya di API saya. Saya hanya ingin menunjukkan "peringatan" kepada siapa pun yang menggunakan metode itu.

Bagaimana saya bisa mencapainya?

Pavel Janicek
sumber
10
Apakah @Deprecrated bukan opsi untuk Anda?
templatetypedef
18
Memang, tapi saya tidak tahu tentang itu ... itu sebabnya saya mengajukan pertanyaan :)
Pavel Janicek
4
komentar bukanlah tempat untuk jawaban!
mattumotu

Jawaban:

577

Gunakan @Deprecatedpada metode. Jangan lupa tentang klarifikasi bidang javadoc:

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}
Vladimir Ivanov
sumber
2
Bagaimana Anda menautkan perpustakaan eksternal? mis .: com.hello.api.PublicController # new
Faizan Kazi
@LinuxLars sepenuhnya setuju! Java 9 menambahkan beberapa atribut untuk mulai membuat penghinaan dianggap serius tetapi menambahkan atribut lain reasondengan nilai default ""tidak ada salahnya
asgs
3
Saya berharap @deprecatedpesan dalam komentar dapat ditambahkan ke @Deprecated(satu tempat untuk memperbaiki semuanya) ...
U. Windl
88

Gunakan @Deprecatedanotasi dan @deprecatedtag JavaDoc.

The @deprecatedtag javadoc digunakan untuk tujuan dokumentasi.

The @Deprecatedpenjelasan menginstruksikan compiler bahwa metode ini usang. Inilah yang tertulis dalam dokumen Sun / Oracles tentang masalah ini:

Menggunakan @Deprecatedanotasi untuk menghilangkan kelas, metode, atau bidang memastikan bahwa semua kompiler akan mengeluarkan peringatan ketika kode menggunakan elemen program itu. Sebaliknya, tidak ada jaminan bahwa semua kompiler akan selalu mengeluarkan peringatan berdasarkan @deprecatedtag Javadoc, meskipun kompiler Sun saat ini melakukannya. Kompiler lain mungkin tidak mengeluarkan peringatan seperti itu. Jadi, menggunakan @Deprecatedanotasi untuk menghasilkan peringatan lebih portabel yang mengandalkan @deprecatedtag Javadoc.

Anda dapat menemukan dokumen lengkap di Bagaimana dan Kapan Menghentikan API

ShaMan-H_Fel
sumber
1
Tidak sepenuhnya benar. Kedua javadoc dan penjelasan kirim compiler metode sudah ditinggalkan
Bohemian
17
@Bohemian Sebenarnya itu tidak sepenuhnya benar. Anotasi didefinisikan dalam bagian Spesifikasi Bahasa Java 9.6.1.6 ( java.sun.com/docs/books/jls/third_edition/html/… ), sedangkan tag javadoc tidak. Jadi anotasi adalah bagian dari bahasa. Jika Anda memutuskan untuk menulis kompiler Java Anda sendiri, Anda dapat mengabaikan tag javadoc, tetapi Anda harus mengenali anotasi tersebut.
ShaMan-H_Fel
@ ShaMan-H_Fel Saya percaya model javadoc juga berfungsi. Karena itu satu-satunya pilihan sebelum Java 5, dan itu berhasil. Ketika Anda menandai metode dengan @deprecatedtag javadoc (dalam Java 4-), kompiler menandai metode (kelas, bidang) sudah tidak digunakan lagi dan IDE menunjukkan peringatan, bahkan ketika tidak ada sumber yang tersedia.
Amir Pashazadeh
42

karena beberapa penjelasan kecil tidak ada

Gunakan @Deprecatedanotasi pada metode seperti ini

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

ingatlah untuk menjelaskan:

  1. Mengapa metode ini tidak lagi direkomendasikan . Masalah apa yang muncul saat menggunakannya. Berikan tautan ke diskusi tentang masalah itu jika ada. (ingat untuk memisahkan baris agar mudah dibaca<br/>
  2. Kapan itu akan dihapus . (beri tahu pengguna Anda seberapa besar mereka masih dapat mengandalkan metode ini jika mereka memutuskan untuk tetap menggunakan cara lama)
  3. Berikan solusi atau tautan ke metode yang Anda rekomendasikan {@link #setPurchasePrice()}
azerafati
sumber
Bukankah seharusnya <br/>, alih-alih </br>?
argh1969
@ argh1969, benar! Saya tidak ingat dari mana saya mendapat templat itu. Tapi saya bisa mengkonfirmasi kedua versi berfungsi. Meskipun saya mengedit mendukung standar.
azerafati
37

Ada dua hal yang dapat Anda lakukan:

  1. Tambahkan @Deprecatedanotasi ke metode, dan
  2. Tambahkan @deprecatedtag ke javadoc metode

Anda harus melakukan keduanya !

Mengutip dokumentasi java tentang hal ini:

Dimulai dengan J2SE 5.0, Anda mencabut kelas, metode, atau bidang dengan menggunakan anotasi @Deprecated. Selain itu, Anda dapat menggunakan tag Javadoc @deprecated memberitahu pengembang apa yang harus digunakan.

Menggunakan anotasi menyebabkan kompiler Java untuk menghasilkan peringatan ketika kelas, metode, atau bidang yang usang digunakan. Kompiler menekan peringatan penghentian jika unit kompilasi yang tidak digunakan menggunakan kelas, metode, atau bidang yang sudah tidak digunakan lagi. Ini memungkinkan Anda untuk membangun API lawas tanpa menghasilkan peringatan.

Anda sangat disarankan untuk menggunakan tag Javadoc @deprecated dengan komentar yang sesuai menjelaskan cara menggunakan API baru. Ini memastikan pengembang akan memiliki jalur migrasi yang bisa diterapkan dari API lama ke API baru

Bohemian
sumber
Ini berarti bahwa komentar javadoc sangat disarankan selain anotasi, bukan sebagai pengganti! Itu sebabnya selalu lebih baik untuk menempatkan keduanya.
morellet.d
@ morellet.d Terima kasih telah menunjukkannya. Saya pada dasarnya telah menulis ulang jawaban saya sekarang (saya tidak membaca dokumen dengan cukup hati-hati!). Cheers
Bohemian
8

Gunakan anotasi @Deprecated untuk metode Anda, dan Anda juga harus menyebutkannya di javadocs Anda.

ya
sumber
Tautan sekarang rusak
Yetti99
3

Lihatlah @Deprecatedanotasi tersebut.

jham
sumber