В Java сокращённая форма описания модели данных называется record. Это специальный тип данных, введённый в Java 14 (как preview feature), предназначенный для упрощения создания неизменяемых объектов (immutable objects).
Основные характеристики и преимущества record включают:
- Неизменяемость. Все поля в
recordявляются финальными (final) и устанавливаются только один раз, при создании объекта. - Автоматическое создание методов. Java автоматически генерирует методы
equals(),hashCode(),toString(), а также методы доступа (геттеры) для полей. - Короткий синтаксис. Для определения
recordиспользуется компактный синтаксис, что делает код более читаемым и уменьшает количество шаблонного кода (boilerplate code).
Пример использования record:
public record Person(String name, int age) {
}
В этом примере Person – это record с двумя полями: name и age. Компилятор автоматически создаёт для этого record следующие методы:
- Конструктор с двумя параметрами
nameиage. - Методы-геттеры
name()иage(). - Методы
equals(),hashCode(),toString().
Полный пример использования:
public record Person(String name, int age) {
// Вложенные методы, если необходимы, могут быть добавлены здесь.
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
System.out.println(person.name()); // Output: John
System.out.println(person.age()); // Output: 30
System.out.println(person); // Output: Person[name=John, age=30]
}
}
Некоторые дополнительные возможности record:
- Валидация данных. Вы можете добавлять проверки (валидацию) в конструктор, чтобы удостовериться, что создаваемые объекты корректны.
public record Person(String name, int age) {
public Person {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
}
}
- Деконструкция. Записи поддерживают деконструкцию, что позволяет легко распаковывать значения полей:
public class Main {
public static void main(String[] args) {
Person person = new Person("Jane", 25);
String name = person.name();
int age = person.age();
System.out.printf("Name: %s, Age: %d%n", name, age);
// Деконструкция
var (n, a) = person;
System.out.printf("Name: %s, Age: %d%n", n, a);
}
}
Использование record в Java помогает существенно уменьшить количество шаблонного кода, делая модели данных более читабельными и легкими для поддержки.

