Kayıt için varsayılan kurucuyu tanımlayın


20

Bir kayıt var ve varsayılan yapıcı eklemek istiyorum.

public record Record(int recordId) {
   public Record{

   }
}

Ama int param ile yapıcı yarattı.

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

Bir kayda nasıl varsayılan bir kurucu ekleyebiliriz?


tanımladığınız, bildirimini kayıt başlığından alan kompakt bir kurucu. Bir kayıt bileşeni ile kompakt kurucudaki karşılık gelen biçimsel parametre arasında isim, tip ve değişken aritika olarak 1-1 eşleşme vardır, aynı kurallı kurucu için de geçerlidir. Bir kaydın yalnızca kanonik bir kurucusu olabilir. Bildirilirse, kompakt kurucu kanonik kurucudur
Vicente Romero

Yanıtlar:


18

Tüyleri bölmek için, hiçbir varsayılan kurucu tanımlayamazsınız, çünkü tanımlanmış kurucu olmadığında derleyici tarafından varsayılan kurucu oluşturulur, dolayısıyla tanımlanmış kurucu tanım gereği varsayılan bir kurucu değildir.

Bir kaydın bağımsız değişken yapıcısına sahip olmasını istemiyorsanız , tüm kayıt alanlarını bağımsız değişken olarak alan "kurallı kurucu" çağrıldığı sürece kayıtlar ek kurucuların veya fabrika yöntemlerinin eklenmesine izin verir .

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

17

Açık kurucu

Sizin durumunuzda, kanonik kurucuya delegasyonla birlikte varsayılan bir değere sahip bir bağımsız değişken yapıcısı belirtebilirsiniz ve isterseniz -

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

Kısacası, kanonik olmayan herhangi bir kurucu bir temsilci seçmeli ve bu temsillerin veri taşıyıcı doğası için geçerli olmalıdır.

Kompakt Yapıcı

Öte yandan, kodunuzda kullandığınız temsili unutmayın.

public Record {}

, tüm bağımsız değişkenleri kabul eden bir yapıcıyı temsil eden ve kaydın nitelikleri olarak sağlanan verilerin doğrulanması için de kullanılabilen bir "kompakt kurucu" olarak adlandırılır. Kompakt bir kurucu, kanonik kurucuyu bildirmenin alternatif bir yoludur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.