Определить конструктор по умолчанию для записи
У меня есть запись, и я хочу добавить к ней конструктор по умолчанию.
public record Record(int recordId) {
public Record {
}
}
Но он создал конструктор с int
парам.
public final class Record extends java.lang.Record {
private final int recordId;
public Record(int);
//other method
}
Как мы можем добавить к записи конструктор по умолчанию?
2 ответа
Чтобы разделить волосы, вы никогда не можете определить конструктор по умолчанию, потому что конструктор по умолчанию генерируется компилятором, когда конструкторы не определены, поэтому любой определенный конструктор по определению не является конструктором по умолчанию.
Если вы хотите, чтобы запись имела конструктор без аргументов, записи позволяют добавлять дополнительные конструкторы или фабричные методы, если вызывается "канонический конструктор", который принимает все поля записи в качестве аргументов.
public record Record(int recordId) {
public Record() {
this(0);
}
}
Явный конструктор
В вашем случае вы можете явно указать конструктор без аргументов с делегированием каноническому конструктору со значением по умолчанию, если хотите, и это можно сделать как -
public Record(){
this(Integer.MIN_VALUE);
}
Короче говоря, любой неканонический конструктор должен делегировать одному, и это должно быть верным для природы этих представлений, несущих данные.
Компактный конструктор
С другой стороны, обратите внимание, что представление, которое вы использовали в своем коде.
public Record {}
называется "компактным конструктором", который представляет собой конструктор, принимающий все аргументы, и который также может использоваться для проверки данных, предоставленных в качестве атрибутов записи. Компактный конструктор - это альтернативный способ объявления канонического конструктора.