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?
java
java-14
java-record
Code_Mode
quelle
quelle
Antworten:
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.
quelle
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:
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.
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.
quelle