Компактный канонический конструктор
Валидация и нормализация полей record без повторения списка параметров.
Сравнение кода
✕ Java 16
public record Person(String name,
List<String> pets) {
// Full canonical constructor
public Person(String name,
List<String> pets) {
Objects.requireNonNull(name);
this.name = name;
this.pets = List.copyOf(pets);
}
}
✓ Java 16+
public record Person(String name,
List<String> pets) {
// Compact constructor
public Person {
Objects.requireNonNull(name);
pets = List.copyOf(pets);
}
}
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Меньше повторений
Не нужно повторять список параметров и вручную присваивать каждое поле.
Валидация
Отлично подходит для проверки на null, валидации диапазонов и защитного копирования.
Более понятное намерение
Компактный синтаксис акцентирует внимание на валидации, а не на шаблонном коде.
Старый подход
Явная валидация в конструкторе
Современный подход
Компактный конструктор
Начиная с JDK
16
Сложность
Средний
Поддержка JDK
Компактный канонический конструктор
Доступно
Доступно в JDK 16 (март 2021)
Как это работает
Record может объявить компактный канонический конструктор, который опускает список параметров и присваивания полей. Компилятор автоматически присваивает параметры полям после выполнения вашей логики валидации. Это идеально подходит для проверки предусловий, защитного копирования и нормализации.
Связанная документация
Доказательство