Класс Record
public abstract class Record extends Object
Дополнительные сведения о записях, включая описания неявно объявляемых методов, синтезируемых компилятором, см. в разделе 8.10 Спецификации языка Java.
Класс-запись — это поверхностно неизменяемый прозрачный носитель фиксированного набора значений, называемых компонентами записи. Язык Java предоставляет лаконичный синтаксис для объявления классов-записей, при котором компоненты записи объявляются в заголовке записи. Список компонентов записи, объявленных в заголовке, образует дескриптор записи.
Класс-запись имеет следующие обязательные члены: канонический конструктор, который должен иметь уровень доступа не ниже, чем у класса-записи, и дескриптор которого совпадает с дескриптором записи; закрытое поле final, соответствующее каждому компоненту, имя и тип которого совпадают с именем и типом компонента; открытый метод доступа, соответствующий каждому компоненту, имя и возвращаемый тип которого совпадают с именем и типом компонента. Если такие члены явно не объявлены в теле записи, для них предоставляются неявные реализации.
Неявное объявление канонического конструктора имеет тот же уровень доступа, что и класс-запись, и инициализирует поля компонентов соответствующими аргументами конструктора. Неявно объявленные методы доступа возвращают значение соответствующего поля компонента. Неявные объявления методов Object.equals(Object), Object.hashCode() и Object.toString() формируются на основе всех полей компонентов.
Основные причины для явного объявления канонического конструктора или методов доступа — проверка аргументов конструктора, создание защитных копий изменяемых компонентов или нормализация групп компонентов (например, сокращение рационального числа до несократимого вида).
Для всех классов-записей должен выполняться следующий инвариант: если компоненты записи R — c1, c2, ... cn, то при копировании экземпляра записи следующим образом:
R copy = new R(r.c1(), r.c2(), ..., r.cn());
должно выполняться условие r.equals(copy).- Примечание к API:
- Класс-запись, который
implementsSerializable, называется сериализуемой записью. Сериализация и десериализация сериализуемых записей выполняются иначе, чем для обычных сериализуемых объектов. Во время десериализации для создания объекта-записи вызывается его канонический конструктор. Некоторые методы, связанные с сериализацией, например readObject и writeObject, игнорируются для сериализуемых записей. Дополнительные сведения о сериализуемых записях см. в Спецификации сериализации объектов Java, разделе 1.13 «Сериализация записей»., Структуру класса-записи можно получить во время выполнения с помощью отражения. Подробнее см.Class.isRecord()иClass.getRecordComponents(). - См. Спецификацию языка Java:
- 8.10 Классы-записи
- Начиная с версии:
- 16
- Внешние спецификации
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор, вызываемый для классов-записей. |
Краткое описание методов
Подробное описание конструкторов
Record
protected Record()
Подробное описание методов
equals
public abstract boolean equals(Object obj)
Object.equals, классы-записи должны также соблюдать инвариант: если экземпляр записи «копируется» путем передачи результатов методов доступа к компонентам записи в канонический конструктор, как показано ниже:
R copy = new R(r.c1(), r.c2(), ..., r.cn());
должно выполняться условие r.equals(copy).- Переопределяет:
-
equalsв классеObject - Требования к реализации:
- Неявно предоставляемая реализация возвращает
trueтогда и только тогда, когда аргумент является экземпляром того же класса-записи, что и эта запись, и каждый компонент этой записи равен соответствующему компоненту аргумента; в противном случае возвращаетсяfalse. Равенство компонентаcопределяется следующим образом:- Если компонент имеет ссылочный тип, он считается равным тогда и только тогда, когда
Objects.equals(this.c, r.c)возвращаетtrue. - Если компонент имеет примитивный тип, сравнение выполняется с использованием соответствующего класса-обертки примитивного типа
PW(соответствующим классом-оберткой дляintявляетсяjava.lang.Integerи т. д.); компонент считается равным тогда и только тогда, когдаPW.compare(this.c, r.c)возвращает0.
- Если компонент имеет ссылочный тип, он считается равным тогда и только тогда, когда
- Параметры:
-
obj— объект-ссылка для сравнения. - Возвращает:
-
true, если эта запись равна аргументу; в противном случае —false. - См. также:
hashCode
public abstract int hashCode()
Object.hashCode. Для записей поведение хеширования ограничено уточненным контрактом Record.equals, согласно которому любые две записи, созданные из одинаковых компонентов, должны иметь одинаковый хеш-код.- Переопределяет:
-
hashCodeв классеObject - Требования к реализации:
- Неявно предоставляемая реализация возвращает значение хеш-кода, полученное путем объединения соответствующих хеш-кодов каждого компонента. Точный алгоритм, используемый неявно предоставляемой реализацией, не определен и может изменяться в указанных выше пределах. Полученное целое число не обязано оставаться неизменным при разных запусках приложения, даже если хеш-коды значений компонентов остаются неизменными. Кроме того, компонент примитивного типа может вносить свои биты в хеш-код иначе, чем
hashCodeего класса-обертки примитивного типа. - Возвращает:
- значение хеш-кода этой записи.
- См. также:
toString
public abstract String toString()
Object.toString(), метод toString возвращает строку, которая «текстуально представляет» эту запись. Результат должен быть кратким, но информативным и удобным для чтения. Помимо этого общего контракта, классы-записи должны также соблюдать инвариант: любые две записи, которые равны, должны иметь одинаковые строковые представления. В редких случаях, когда соответствующие равные значения компонентов могут иметь разные строковые представления, этот инвариант неизбежно ослабляется.
- Переопределяет:
-
toStringв классеObject - Требования к реализации:
- Неявно предоставляемая реализация возвращает строку, содержащую имя класса-записи, имена компонентов записи и строковые представления значений компонентов, чтобы выполнить контракт этого метода. Точный формат, создаваемый этой неявно предоставляемой реализацией, может изменяться, поэтому приложениям не следует анализировать текущий синтаксис для восстановления значений компонентов записи.
- Возвращает:
- строковое представление объекта.
- См. также:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Record.html