J
Java Geek
@java_geek2.5K подп.
640просмотров
25.9%от подписчиков
4 февраля 2026 г.
questionScore: 704
💿 Java Records: Конец эпохи Lombok? Долгие годы Project Lombok был нашим единственным спасением от бесконечных геттеров, сеттеров, equals() и hashCode(). Но начиная с Java 14 (и официально в Java 16), в языке появилась нативная альтернатива - Records. Многие поспешили удалить Lombok и переписать всё на рекорды. И... столкнулись с проблемами. Давайте разберем, почему record - это не просто "короткий класс". 🏎 Скорость написания Lombok (@Value для неизменяемости): @Value public class User { String name; int age; } Record: public record User(String name, int age) {} Тут победа за рекордами. Синтаксис максимально лаконичен. Мы объявляем состояние, а не поля. 🔍 Что под капотом? (Главные отличия) Вот здесь начинаются нюансы, из-за которых Records нельзя назвать полной заменой Lombok. 1. Жесткая неизменяемость (Immutability) Record - это всегда final класс с final полями. Вы не можете сделать "сеттер" в рекорде. Если вам нужен изменяемый DTO (например, для заполнения формы по шагам) - Record не подойдет. Lombok @Data всё еще нужен. 2. Запрет на наследование Рекорды не могут наследоваться от других классов (они уже неявно наследуются от java.lang.Record). • Если у вас есть BaseEntity с полем ID - вы не сможете унаследовать рекорд от него. 3. Имена геттеров Это ломает многие старые библиотеки. • Lombok/JavaBean: getName(), getAge() • Record: name(), age() • Совет: Jackson и современные JSON-библиотеки уже умеют с этим работать, но легаси-фреймворки могут "не увидеть" ваши поля. ✨ Killer Feature: Компактные конструкторы То, чего нет в Lombok. Валидация данных в рекордах выглядит потрясающе чисто. Вам не нужно дублировать аргументы: public record User(String name, int age) { // Обратите внимание: нет скобок с аргументами! public User { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative"); } name = name.toUpperCase(); // Можно даже менять данные перед записью } } 🏆 Вердикт: Кто победил? Никто. Это инструменты для разных целей. ✅ Используйте record: Для DTO, ключей в Map, ответов API, записей в Event Log и промежуточных данных в Stream API. Это "именованные кортежи" данных. ✅ Используйте Lombok / POJO: Для JPA сущностей (Hibernate не очень любит рекорды из-за прокси и отсутствия сеттеров), для классов с наследованием и там, где нужна мутабельность. #Java #Lombok #CleanCode #Java17 👉 @java_geek
640
просмотров
2435
символов
Нет
эмодзи
Нет
медиа

Другие посты @java_geek

Все посты канала →
💿 Java Records: Конец эпохи Lombok? Долгие годы Project Lom — @java_geek | PostSniper