Является ли запись (record) в Java просто совокупностью полей?

«Является ли запись (record) в Java просто совокупностью полей?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, запись (record) — это не просто совокупность полей, а специальный неизменяемый класс, предназначенный для прозрачного хранения данных.

Ключевые характеристики record (Java 16+):

  1. Неизменяемость (Immutable): Все поля объявляются как private final. После создания состояние записи изменить нельзя.
  2. Автоматическая генерация шаблонного кода: Компилятор создает:
    • Канонический конструктор.
    • Методы доступа (геттеры) с именами, совпадающими с именами полей (например, name(), а не getName()).
    • Реализации equals(), hashCode() и toString(), основанные на всех компонентах записи.

Пример объявления и использования:

// Объявление записи
record Point(int x, int y) {}

// Использование
Point p = new Point(5, 10);
System.out.println(p.x()); // 5 (геттер)
System.out.println(p.y()); // 10
System.out.println(p);     // Point[x=5, y=10] (авто toString)
Чем record отличается от простого класса с полями? Аспект Обычный класс Record
Неизменяемость Не гарантирована Гарантирована
Шаблонный код Нужно писать вручную Генерируется автоматически
Назначение Может содержать логику Предназначен для данных (DTO, value objects)
Наследование Может наследовать и быть унаследованным Неявно final, не может наследовать другие классы

Вывод: Record — это семантическая конструкция для моделирования данных, которая обеспечивает безопасность, краткость и предсказуемость.