👩💻 RecordsRecords
(записи) — это новая концепция, представленная в Java 14, которая позволяет создавать простые, неизменяемые классы-контейнеры данных.
Как правило, мы можем использовать записи в любой ситуации, когда нужно объявить простые контейнеры данных с неизменяемыми свойствами и автоматически сгенерированными методами.
Если раньше класс
Student мы оформляли так:
public final class Student {
private final String name;
private final int age;
public Man(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
То сейчас нам не придётся писать кучу шаблонного кода (геттеры/сеттеры, методы
toString(),
equals() и
hashCode()):
public record Student(String name, int age) {}
Хочешь добавить метод? Легко:
public record Student(String name, int age) {
public void sayHello() {
System.out.println("Hello");
}
}
Кстати, если заглянуть в байт-код после компиляции, можно увидеть несколько интересных моментов:
⏺ Компилятор заменил ключевое слово Record на class.
⏺ Компилятор объявил класс как final. Это указывает на то, что этот класс не может быть расширен. Это также означает, что он не может быть унаследован и неизменен по своей природе.
⏺ Преобразованный класс расширяет java.lang.Record. Это указывает на то, что все записи являются подклассом класса Record, определенного в пакете java.lang.
⏺ Компилятор добавляет параметризованный конструктор.
⏺ Компилятор автоматически сгенерировал методы toString(), hashCode() и equals().
⏺ Компилятор добавил методы для доступа к полям. Обратите внимание на соглашение об именах методов — они точно совпадают с именами полей, перед именами полей не должно быть get или set.
100 🕺 — и я пишу новый пост➡️ Java Developer | #records