Record (с Java 14) — это специальный класс для неизменяемых данных-носителей.
record Person(String name, int age) { }
// Автоматически генерируется:
// - конструктор
// - геттеры (name(), age())
// - equals(), hashCode(), toString()✔️ Преимущества:
— минимум boilerplate;
— иммутабельность из коробки;
— компактный синтаксис.
❌ Ограничения:
— нельзя наследоваться (final);
— все поля final;
— нельзя объявлять instance поля вне компонентов.
Хорошо подходит для DTO, value objects.
⚠️ Почему в реальных проектах используют нечасто
— Проблемы с неймингом: геттеры без префикса get нарушают JavaBeans-конвенции (name() вместо getName()), что ломает совместимость со многими фреймворками.
— Проблемы совместимости с библиотеками: многие фреймворки (Jackson, Hibernate/JPA, Spring Data) требуют дополнительной настройки или вовсе не поддерживают records.
🐸 Библиотека собеса по Java
#core