Inisialisasi variabel akhir [duplikat]

Saya memiliki dua variabel final yang dideklarasikan di tingkat kelas tetapi tidak diinisialisasi.
Jadi, sekarang ketika saya mencoba membuat konstruktor default untuk kelas itu, muncul pesan kesalahan
The blank final field may not have been initialized.

Mengapa kesalahan ini terjadi? Mengapa perlu menginisialisasi variabel akhir di konstruktor?

Saya juga memiliki pertanyaan lain, apakah tidak mungkin membuat instance tanpa konstruktor default? Bahkan jika kita memiliki konstruktor yang diparameterisasi?


person Saikiran Gosikonda    schedule 26.02.2016    source sumber
comment
lihat stackoverflow.com/questions/26935453/   -  person sasikumar    schedule 26.02.2016
comment
Anda harus selalu menginisialisasi bidang akhir dengan konstruktor. Bidang terakhir harus telah ditetapkan selama pembuatan objek. Terlepas dari konstruktornya - setiap bidang akhir harus memiliki nilai yang ditetapkan.   -  person mlewandowski    schedule 26.02.2016
comment
@mlewandowski Anda tidak perlu melakukannya dengan konstruktor - Anda dapat langsung memberikan nilai pada bidang tersebut atau menggunakan blok penginisialisasi (yang pada dasarnya setara).   -  person Andy Turner    schedule 26.02.2016


Jawaban (2)


Mengapa perlu menginisialisasi variabel akhir di konstruktor?

Bidang final harus diinisialisasi dalam konstruktor karena inilah arti final yang telah didefinisikan.

Anda tidak perlu menyetel final feilds di konstruktor default jika Anda memanggil konstruktor yang misalnya.

class A {
   final int a;

   public A() {
       this(0);
   }

   public A(int a) {
       this.a = a;
   }
}

apakah tidak mungkin membuat instance tanpa konstruktor default?

Ya. Ada beberapa cara untuk melakukan hal ini, paling sering dengan memanggil konstruktor yang mengambil parameter.

Bahkan jika kita memiliki konstruktor yang diparameterisasi?

Dalam hal ini, Anda hanya akan memiliki konstruktor yang tidak menggunakan parameter jika Anda mendefinisikannya.

person Peter Lawrey    schedule 26.02.2016

Final variable adalah variabel tersebut which can not be changed once object is initialized. Jadi bagaimana pun Anda harus menginisialisasi variabel akhir. Jika Anda menyediakan konstruktor default serta konstruktor berparameter, Anda harus menginisialisasi variabel tersebut, karena Anda tidak dapat mengubah nilainya nanti.

person Rahul    schedule 26.02.2016