Определить конструктор по умолчанию для записи - PullRequest
20 голосов
/ 11 апреля 2020

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

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 ]

20 голосов
/ 11 апреля 2020

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

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

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}
17 голосов
/ 11 апреля 2020

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

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

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

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

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

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

public Record {}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...