Определить конструктор по умолчанию для записи


20

У меня есть запись, и я хочу добавить конструктор по умолчанию к ней.

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
}

Как мы можем добавить конструктор по умолчанию к записи?


Вы определили компактный конструктор, который получает свое объявление из заголовка записи. Существует совпадение 1-1 в имени, типе и переменной арности между компонентом записи и соответствующим формальным параметром в компактном конструкторе, то же самое относится и к каноническому конструктору. Запись может иметь только канонический конструктор. Если заявлено, что компактный конструктор является каноническим конструктором
Висенте Ромеро

Ответы:


18

Чтобы разделить волосы, вы никогда не сможете определить конструктор по умолчанию, потому что конструктор по умолчанию генерируется компилятором, когда конструкторы не определены, поэтому любой определенный конструктор по определению не является конструктором по умолчанию.

Если вы хотите, чтобы запись имела конструктор без аргументов, записи позволяют добавлять дополнительные конструкторы или фабричные методы , если вызывается «канонический конструктор», который принимает все поля записи в качестве аргументов.

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

17

Явный конструктор

В вашем случае вы можете явно указать конструктор без аргументов с делегированием каноническому конструктору со значением по умолчанию, если вы хотите, и это можно сделать как -

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

Короче говоря, любой неканонический конструктор должен делегировать один, и это должно выполняться для характера переноса данных этих представлений.

Компактный Конструктор

С другой стороны, обратите внимание, что представление вы использовали в своем коде.

public Record {}

называется «компактным конструктором», который представляет конструктор, принимающий все аргументы, и который также может использоваться для проверки данных, предоставленных в качестве атрибутов записи. Компактный конструктор - это альтернативный способ объявления канонического конструктора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.