Вопрос с собеседования · Java

Когда record — неудачный выбор?

MiddleСовременная JavaJava >=16
Коротко

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-иерархиями?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования