Record – сокращённая форма описания модели данных в Java

В Java сокращённая форма описания модели данных называется record. Это специальный тип данных, введённый в Java 14 (как preview feature), предназначенный для упрощения создания неизменяемых объектов (immutable objects).

Основные характеристики и преимущества record включают:

  1. Неизменяемость. Все поля в record являются финальными (final) и устанавливаются только один раз, при создании объекта.
  2. Автоматическое создание методов. Java автоматически генерирует методы equals(), hashCode(), toString(), а также методы доступа (геттеры) для полей.
  3. Короткий синтаксис. Для определения 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 помогает существенно уменьшить количество шаблонного кода, делая модели данных более читабельными и легкими для поддержки.

Каталог и рейтинг онлайн-курсов программирования Джава
Logo