Что такое records в Java и для чего они нужны?

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

Ответ

Records (записи) — это специальный вид классов в Java, представленный в Java 14 (предпросмотр) и окончательно в Java 16. Они предназначены для моделирования неизменяемых (immutable) данных, выступая компактной альтернативой шаблонным POJO-классам.

Для чего нужны:

  1. Сокращение шаблонного кода. Компилятор автоматически генерирует:
    • Поля final (private final) на основе заголовка записи.
    • Канонический конструктор.
    • Методы доступа (геттеры) с именами, совпадающими с именами полей.
    • Методы equals(), hashCode() и toString().
  2. Гарантия неизменяемости. Все компоненты записи — final, что делает экземпляры по умолчанию неизменяемыми и потокобезопасными.
  3. Повышение читаемости. Явно декларирует, что класс является контейнером для данных.

Пример:

// Объявление record
public record Person(String name, int age) {}

// Использование
Person person = new Person("Alice", 30);
System.out.println(person.name()); // Геттер 'name()'
System.out.println(person); // Автоматический toString(): Person[name=Alice, age=30]

Сравнение: Такой функционал потребовал бы десятков строк в обычном классе.