Записи для классов данных
Одна строка заменяет более 30 строк шаблонного кода для неизменяемых носителей данных.
Сравнение кода
✕ Java 8
public class Point {
private final int x, y;
public Point(int x, int y) { ... }
public int getX() { return x; }
public int getY() { return y; }
// equals, hashCode, toString
}
✓ Java 16+
public record Point(int x, int y) {}
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Однострочное определение
Одна строка заменяет конструктор, геттеры, equals, hashCode, toString.
Неизменяемость по умолчанию
Все поля final — никаких ловушек с сеттерами.
Дружественность к паттернам
Записи работают с паттернами деструктуризации в switch и instanceof.
Старый подход
Многословный POJO
Современный подход
record
Начиная с JDK
16
Сложность
Начинающий
Поддержка JDK
Записи для классов данных
Доступно
Доступно в JDK 16 (март 2021)
Как это работает
Записи автоматически генерируют конструктор, аксессоры (x(), y()), equals(), hashCode() и toString(). Они неизменяемы по своей природе и идеально подходят для DTO, объектов-значений и pattern matching.
Связанная документация
Доказательство