Когда record — неудачный выбор?
Record прозрачен: компоненты — публичный контракт. Не подходит для изменяемых сущностей со скрытым представлением и охраняемыми инвариантами, для JPA-сущностей (нужны конструктор без аргументов, изменяемость, прокси), для иерархий наследования.
- Удачно: DTO, ответы API, ключи составных карт, значения (Money, Range), кортежи результатов
- Сменить внутреннее представление позже нельзя без смены API
- Equals по всем компонентам — не всегда нужная семантика
А ещё JPA допускает record для @Embeddable (Hibernate 6.2+) и проекций
Подробно
Record описывает данные, а не поведение с охраняемыми инвариантами. Он неизменяем и публикует компоненты аксессорами, поэтому свободы поменять внутреннее представление позже у вас не будет — а это как раз то, ради чего существует инкапсуляция. Типичные удачные применения: DTO, ключи составных карт, промежуточные результаты в стримах, value objects домена вроде Money или OrderId. Неудачные: JPA-сущности с изменяемым состоянием и требованием конструктора без аргументов, а также классы, где представление хочется скрыть. При этом ключом карты record быть отлично умеет, интерфейсы реализует, а любой сгенерированный метод при желании можно переопределить вручную.
Что хотят услышать
- Принцип прозрачности.
- Неудачные и удачные применения.
Частые ошибки
- Пытаться использовать record как JPA-сущность.
- Считать, что у record нельзя переопределить сгенерированные методы.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Когда объект нужно использовать ключом HashMap — record не даёт стабильный hashCode
- ✓Когда нужно изменяемое состояние и скрытое представление
- ✗Когда требуется реализовать интерфейс
- ✗Когда нужно переопределить toString
Что спросят дальше
- Почему record плохо подходит на роль JPA-сущности?
- Как record сочетается с sealed-иерархиями?
Разбор темы
- Records: компактные носители данных
Что генерирует record, канонический и компактный конструкторы, ограничения и когда применять.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.