💿 Java Records: Убийцы бойлерплейта
Сколько раз вы создавали класс просто чтобы "перенести данные" из точки А в точку Б?
Вы пишете 3 поля, а потом IDE генерирует вам 50 строк кода: конструктор, геттеры,
В Java 16+ этому положили конец. Встречайте Records.
📉 Было vs Стало
Допустим, нам нужен простой DTO для пользователя.
❌ Классический POJO (Java 1.0 - 15):
✅ Record (Java 16+):
Всё. Это одна строка. 🔥
⚙️ Что происходит под капотом?
Компилятор делает всю грязную работу за вас. Создавая
1. Приватные финальные поля (
2. Конструктор со всеми аргументами.
3. Геттеры (без префикса
4.
5.
🛠 Кастомизация (Compact Constructor)
"А что, если мне нужна валидация? Нельзя же создать юзера с отрицательным возрастом!"
Для этого есть Компактный конструктор. Вам даже не нужно перечислять аргументы:
⚠️ Ограничения (Важно знать)
Records, это не замена обычным классам во всем.
1. Они неизменяемы (Immutable). Сеттеров нет и не будет. Хотите поменять поле? Создавайте новый объект.
2. Нет наследования. Record не может наследовать (
💡 Когда использовать?
🔴 DTO (Data Transfer Objects): Ответы от API, запросы в БД.
🔴 Ключи для Map: Благодаря гарантированному
🔴 Внутри методов: Можно объявлять локальные рекорды прямо внутри метода, чтобы временно сгруппировать данные.
Records делают код чище и безопаснее. Они идеально сочетаются со Stream API, где данные постоянно передаются и преобразуются.
Если ваш класс это просто "мешок с данными", превращайте его в
#Java #Records #NewJava #CleanCode
📲 Мы в MAX
👉@BookJava
Сколько раз вы создавали класс просто чтобы "перенести данные" из точки А в точку Б?
Вы пишете 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) можно!💡 Когда использовать?
equals/hashCode.Records делают код чище и безопаснее. Они идеально сочетаются со Stream API, где данные постоянно передаются и преобразуются.
Если ваш класс это просто "мешок с данными", превращайте его в
record.#Java #Records #NewJava #CleanCode
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1