J'ai un enregistrement et je veux y ajouter un constructeur par défaut.
public record Record(int recordId) {
public Record {
}
}
Mais il a créé un constructeur avec int
param.
public final class Record extends java.lang.Record {
private final int recordId;
public Record(int);
//other method
}
Comment ajouter un constructeur par défaut à un enregistrement?
java
java-14
java-record
Code_Mode
la source
la source
Réponses:
Pour diviser les cheveux, vous ne pouvez jamais définir un constructeur par défaut, car un constructeur par défaut est généré par le compilateur quand aucun constructeur n'est défini, donc tout constructeur défini n'est par définition pas un constructeur par défaut.
Si vous voulez qu'un enregistrement ait un constructeur sans argument, les enregistrements permettent d'ajouter des constructeurs supplémentaires ou des méthodes d'usine , tant que le "constructeur canonique" qui prend tous les champs d'enregistrement comme arguments est appelé.
la source
Constructeur explicite
Dans votre cas, vous pouvez spécifier explicitement un constructeur sans argument avec la délégation au constructeur canonique avec une valeur par défaut si vous le souhaitez et cela peut être fait comme -
En bref, tout constructeur non canonique devrait déléguer à un, et cela devrait être vrai pour la nature porteuse de données de ces représentations.
Constructeur compact
En revanche, notez que la représentation que vous aviez utilisée dans votre code.
est appelé un "constructeur compact" qui représente un constructeur acceptant tous les arguments et qui peut également être utilisé pour valider les données fournies en tant qu'attributs de l'enregistrement. Un constructeur compact est une autre façon de déclarer le constructeur canonique.
la source