Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
@bookjava
Фото Java Records: Убийцы бойлерплейта Сколько раз вы создавали класс просто чтобы "перенести данные" из точки А в точку Б? Вы пишете 3 поля, а потом IDE генерирует вам 50 строк кода: конструктор, геттеры, equals, hashCode, toString... 🤯 В Java 16+ этому положили конец. Встречайте Records. 📉 Было vs Стало Допустим, нам нужен простой DTO для пользователя. ❌ Классический POJO (Java 1.0 - 15): public class User { private final String name; private final int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } // + equals() // + hashCode() // + toString() ... еще 30 строк кода } ✅ Record (Java 16+): public record User(String name, int age) {} Всё. Это одна строка. 🔥 ⚙️ Что происходит под капотом? Компилятор делает всю грязную работу за вас. Создавая record, вы автоматически получаете: 1. Приватные финальные поля (private final). 2. Конструктор со всеми аргументами. 3. Геттеры (без префикса get! Просто .name(), .age()). 4. equals() и hashCode() (идеально для ключей в Map или Set). 5. toString() (красивый вывод: User[name=Alex, age=25]). 🛠 Кастомизация (Compact Constructor) "А что, если мне нужна валидация? Нельзя же создать юзера с отрицательным возрастом!" Для этого есть Компактный конструктор. Вам даже не нужно перечислять аргументы: public record User(String name, int age) { // Компактный конструктор public User { if (age < 0) { throw new IllegalArgumentException("Возраст не может быть меньше 0"); } // Присваивание this.age = age происходит автоматически! } } ⚠️ Ограничения (Важно знать) Records, это не замена обычным классам во всем. 1. Они неизменяемы (Immutable). Сеттеров нет и не будет. Хотите поменять поле? Создавайте новый объект. 2. Нет наследования. Record не может наследовать (extends) другой класс (потому что он уже наследует java.lang.Record). Но имплементировать интерфейсы (implements) можно! 💡 Когда использовать? 🔴 DTO (Data Transfer Objects): Ответы от API, запросы в БД. 🔴 Ключи для Map: Благодаря гарантированному equals/hashCode. 🔴 Внутри методов: Можно объявлять локальные рекорды прямо внутри метода, чтобы временно сгруппировать данные. Records делают код чище и безопаснее. Они идеально сочетаются со Stream API, где данные постоянно передаются и преобразуются. Если ваш класс это просто "мешок с данными", превращайте его в record. #Java #Records #NewJava #CleanCode 👉 @BookJava
Если у вас установлено приложение,
вы можете сразу перейти в канал