Bagaimana cara mendeklarasikan metode yang tidak dapat mengubah anggota kelas di Java? [duplikat]

Nov 30 2020

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

10 AlexShesterov Nov 30 2020 at 17:16

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 finalbekerja secara berbeda pada bidang dan variabel versus metode dan kelas:

  • Sebuah finallapangan atau variabel adalah konstan. Nilainya tidak dapat diubah setelah ditetapkan.
  • Sebuah finalmetode tidak dapat ditimpa oleh anak kelas. finalpada metode tidak ada hubungannya dengan "keteguhan".
  • Sebuah finalkelas tidak dapat diperpanjang. finaldi kelas tidak ada hubungannya dengan "keteguhan".

Pilihan Anda di Java adalah:

  1. Jadikan kelas Anda tidak berubah (mis. Tandai semua bidangnya final).
  2. Cukup tulis getter Anda (dan metode non-mutator lainnya) dengan hati-hati :)

Satu catatan lagi. Bahkan pada bidang dan variabel, Java finalberbeda dari C ++ const. Sebagai contoh:

  • finalvariabel 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.
    
  • finalbidang 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 objdi 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!
    
salapura.stefan Nov 30 2020 at 17:17

Kamu tidak bisa melakukan itu. Metode terakhir berarti tidak dapat diganti.