Bagaimana seharusnya saya mencatat, bahwa suatu kelas tidak dapat diubah di Jawa?

14

Saya baru-baru ini menemukan betapa berguna objek abadi dan bahwa misalnya jika Anda meneruskan elemen ke konstruktor dan kelas Anda harus abadi, Anda harus menyalin elemen-elemen ini jika mereka tidak abadi sendiri.

Ini membutuhkan banyak pemeriksaan atau pengetahuan tentang proyek saya, karena jika saya punya

public A(B foo)

dan Btidak bisa diubah, Asaya harus menyalin B. Sekarang bayangkan Bsepertinya tidak bisa diubah, tetapi ia sendiri memiliki kelas yang bisa berubah dalam konstruktor dan sebagainya.

Apakah ada standar atau praktik terbaik untuk mendokumentasikan jika suatu kelas tidak dapat diubah di Jawa? Tampaknya tidak ada @immutablekata kunci di Javadoc.

The penjelasan @Immutable tampaknya menjadi sesuatu yang sama sekali berbeda untuk generasi kelas auto dan bukan bagian dari Java standar.

Aufziehvogel
sumber
2
Pertama, menyalin defensif memungkinkan Anda menyiasatinya. Kedua, cara mendokumentasikannya adalah kelas Javadoc
raptortech97
"cara mendokumentasikannya adalah kelas Javadoc" Apakah ada cara standar untuk melakukan ini? Maka ini akan menjadi jawaban yang sudah diterima.
Aufziehvogel
@ raptortech97 Salah satu keuntungan utama dari kelas yang tidak dapat diubah adalah bahwa tidak perlu menyalin secara defensif. Jika harus ada menyalin defensif dari objek yang diduga abadi, Anda salah melakukannya.
bruce
1
@itsbruce Dia sedang berbicara tentang menyalin objek yang bisa berubah. Juga, ada satu alasan untuk menyalin objek yang tidak dapat diubah - cache lokalitas. Beberapa pengumpul sampah menjaga urutan relatif objek, sehingga objek yang dialokasikan bersama tetap bersama.
Doval
Kamu benar. Salahku.
bruce

Jawaban:

7

Melihat dokumentasi Stringkelas (teks tebal adalah sesuatu yang saya lakukan):

Kelas String mewakili karakter string. Semua string literal dalam program Java, seperti "abc", diimplementasikan sebagai instance dari kelas ini. String adalah konstan; nilai-nilai mereka tidak dapat diubah setelah mereka dibuat. Buffer string mendukung string yang dapat berubah. Karena objek String tidak dapat diubah, mereka dapat dibagi.

Seperti yang Anda lihat, tidak ada label tertentu atau spidol lain, namun, mereka menentukan dalam JavaDoc yang menggambarkan kelas bahwa Stringkelas tersebut mewakili objek yang konstan dan tidak dapat diubah.

Dengan demikian, dengan asumsi bahwa Anda mengikuti instruksi yang diberikan dalam tutorial Oracle ini untuk membuat kelas yang tidak dapat diubah, untuk memastikan bahwa kekekalan kelas didokumentasikan, Anda harus memastikan bahwa Anda menyebutkan di dalamnya di dalam JavaDoc yang menggambarkan kelas dan apa itu tidak.

Jika itu masih tidak sesuai dengan yang Anda butuhkan, Anda bisa melihat bagaimana Anda bisa membuat tag JavaDoc kustom di sini .

npinti
sumber