Bagaimana cara mendeklarasikan metode yang tidak dapat mengubah anggota kelas di Java? [duplikat]
Di C ++ kami melakukan metode konstan, sehingga tidak dapat mengubah nilai anggota kelas, tetapi bagaimana saya dapat melakukannya di Java? Saya mencoba deklarasi metode terakhir, yang akan setara dengan konstanta di C ++, tetapi metode terakhir adalah hal lain yang berbeda. Saya ingin membuat metode pengambil, jadi tidak bisa mengubah nilai, hanya membacanya. Seperti metode hanya-baca.
Jawaban
Di Java, tidak mungkin mencegah metode secara deklaratif mengubah kolom non-final. Tidak ada yang namanya "kebenaran const" di Jawa.
Jika bidang kelas bukan- final
, maka itu bisa diubah dengan metode kelas apa pun.
Perhatikan bahwa final
bekerja secara berbeda pada bidang dan variabel versus metode dan kelas:
- Sebuah
final
lapangan atau variabel adalah konstan. Nilainya tidak dapat diubah setelah ditetapkan. - Sebuah
final
metode tidak dapat ditimpa oleh anak kelas.final
pada metode tidak ada hubungannya dengan "keteguhan". - Sebuah
final
kelas tidak dapat diperpanjang.final
di kelas tidak ada hubungannya dengan "keteguhan".
Pilihan Anda di Java adalah:
- Jadikan kelas Anda tidak berubah (mis. Tandai semua bidangnya
final
). - Cukup tulis getter Anda (dan metode non-mutator lainnya) dengan hati-hati :)
Satu catatan lagi. Bahkan pada bidang dan variabel, Java final
berbeda dari C ++ const
. Sebagai contoh:
final
variabel tidak dapat diubah setelah ditetapkan, tetapi Anda dapat menetapkannya setelah deklarasi. Contoh:final int value; if (condition) { value = 1; // Ok! } else { value = 2; // Ok! } value = 3; // Compile error: value already assigned.
final
bidang kelas harus ditetapkan - baik secara langsung atau dari dalam konstruktor. Tetapi bidang ini dapat ditetapkan di mana saja dalam konstruktor. Tidak ada hal khusus seperti "daftar penginisialisasi" C ++ di Java.Deklarasi field / variabel / parameter
final Object obj
di Java secara kasar setara dengan referensi (const-) ke objek non-const di C ++. Artinya, Anda tidak dapat menetapkan ulang referensi , tetapi Anda dapat mengubah objek referensi itu sendiri. Sebuah contoh:// Note that (obsolete) Date class is mutable in Java. final Date myDate = new Date(); myDate = new Date(); // Compilation error: can't reassign a final reference! myDate.setTime(4711); // Ok, mutating referenced object is allowed!
Kamu tidak bisa melakukan itu. Metode terakhir berarti tidak dapat diganti.