Definieren Sie den Standardkonstruktor für den Datensatz


20

Ich habe einen Datensatz und möchte ihm einen Standardkonstruktor hinzufügen.

public record Record(int recordId) {
   public Record{

   }
}

Es wurde jedoch ein Konstruktor mit int param erstellt.

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

Wie können wir einem Datensatz einen Standardkonstruktor hinzufügen?


Was Sie definiert haben, ist ein kompakter Konstruktor, dessen Deklaration aus dem Datensatzheader abgeleitet wird. Es gibt eine 1-1-Übereinstimmung in Name, Typ und Variablenarität zwischen einer Datensatzkomponente und dem entsprechenden formalen Parameter im kompakten Konstruktor. Gleiches gilt für den kanonischen Konstruktor. Ein Datensatz kann nur einen kanonischen Konstruktor haben. Wenn deklariert, ist der kompakte Konstruktor der kanonische Konstruktor
Vicente Romero

Antworten:


18

Um Haare zu teilen, können Sie niemals einen Standardkonstruktor definieren, da der Compiler einen Standardkonstruktor generiert, wenn keine Konstruktoren definiert sind. Daher ist jeder definierte Konstruktor per Definition kein Standardkonstruktor.

Wenn ein Datensatz einen Konstruktor ohne Argumente haben soll , können in Datensätzen zusätzliche Konstruktoren oder Factory-Methoden hinzugefügt werden , sofern der "kanonische Konstruktor" aufgerufen wird, der alle Datensatzfelder als Argumente verwendet.

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

17

Expliziter Konstruktor

In Ihrem Fall können Sie explizit einen Konstruktor ohne Argumente mit der Delegierung an den kanonischen Konstruktor mit einem Standardwert angeben, wenn Sie möchten. Dies kann wie folgt erfolgen:

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

Kurz gesagt, jeder nicht-kanonische Konstruktor sollte an einen delegieren, und dies sollte für den datenführenden Charakter dieser Darstellungen gelten.

Kompakter Konstruktor

Beachten Sie andererseits die Darstellung, die Sie in Ihrem Code verwendet haben.

public Record {}

wird als "kompakter Konstruktor" bezeichnet, der einen Konstruktor darstellt, der alle Argumente akzeptiert und der auch zur Validierung der als Attribute des Datensatzes bereitgestellten Daten verwendet werden kann. Ein kompakter Konstruktor ist eine alternative Möglichkeit, den kanonischen Konstruktor zu deklarieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.