Tetapkan konstruktor default untuk rekaman

20

Saya punya catatan dan ingin menambahkan konstruktor default untuk itu.

public record Record(int recordId) {
   public Record {

   }
}

Tapi itu menciptakan konstruktor dengan intparam.

public final class Record extends java.lang.Record {
    private final int recordId;
    public Record(int);
    //other method
}

Bagaimana kita bisa menambahkan konstruktor default ke catatan?

Code_Mode
sumber
apa yang Anda definisikan adalah konstruktor kompak yang mendapatkan deklarasi yang berasal dari header catatan. Ada kecocokan 1-1 dalam nama, jenis dan variabel arity antara komponen rekaman dan parameter formal yang sesuai dalam konstruktor kompak, yang sama berlaku untuk konstruktor kanonik. Catatan hanya dapat memiliki konstruktor kanonik. Jika dinyatakan konstruktor kompak adalah konstruktor kanonik
Vicente Romero

Jawaban:

18

Untuk memecah rambut, Anda tidak pernah dapat mendefinisikan konstruktor default, karena konstruktor default dihasilkan oleh kompilator ketika tidak ada konstruktor yang ditentukan, sehingga konstruktor yang didefinisikan adalah dengan definisi bukan yang default.

Jika Anda ingin catatan memiliki konstruktor no-arg, catatan memang memungkinkan menambahkan konstruktor tambahan atau metode pabrik , selama "konstruktor kanonik" yang mengambil semua bidang rekaman sebagai argumen dipanggil.

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}
IniNoZaku
sumber
17

Konstruktor eksplisit

Dalam kasus Anda, Anda dapat secara eksplisit menentukan konstruktor tanpa argumen dengan pendelegasian kepada konstruktor kanonik dengan nilai default jika Anda mau dan ini dapat dilakukan sebagai -

public Record(){
    this(Integer.MIN_VALUE);
}

Singkatnya, setiap konstruktor non-kanonik harus mendelegasikan kepada satu, dan itu harus berlaku untuk sifat pembawa data dari representasi ini.

Konstruktor Ringkas

Di sisi lain, perhatikan bahwa representasi yang Anda gunakan dalam kode Anda.

public Record {}

disebut sebagai "konstruktor ringkas" yang mewakili konstruktor yang menerima semua argumen dan itu juga dapat digunakan untuk memvalidasi data yang disediakan sebagai atribut catatan. Konstruktor kompak adalah cara alternatif untuk mendeklarasikan konstruktor kanonik.

Naman
sumber