Language Средний

Валидация и нормализация полей 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 16 (март 2021)

Record может объявить компактный канонический конструктор, который опускает список параметров и присваивания полей. Компилятор автоматически присваивает параметры полям после выполнения вашей логики валидации. Это идеально подходит для проверки предусловий, защитного копирования и нормализации.