Класс Record
public abstract class Record extends Object
Дополнительную информацию о записях, включая описания неявно объявленных методов, синтезируемых компилятором, можно найти в разделе 8.10 спецификации языка Java.
Класс записи — это слабо неизменяемый, прозрачный контейнер для фиксированного набора значений, называемых компонентами записи. Язык Java предоставляет краткий синтаксис для объявления классов записей, в котором компоненты записи объявляются в заголовке записи. Список компонентов записи, объявленных в заголовке записи, образует описание записи.
Класс записи имеет следующие обязательные члены: канонический конструктор, который должен предоставлять как минимум такой же доступ, как и класс записи, и чье описание совпадает с описанием записи; частное конечное поле, соответствующее каждому компоненту, имя и тип которого совпадают с именем и типом компонента; общедоступный метод-аксессор, соответствующий каждому компоненту, имя и возвращаемый тип которого совпадают с именем и типом компонента. Если они не объявлены явно в теле записи, для этих членов предоставляются неявные реализации.
Неявное объявление канонического конструктора имеет тот же уровень доступа, что и класс записи, и инициализирует поля компонентов из соответствующих аргументов конструктора. Неявное объявление методов-аксессоров возвращает значение соответствующего поля компонента. Неявное объявление методов 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).- Overrides:
-
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, так что любые две записи, созданные из одних и тех же компонентов, должны иметь одинаковый хэш-код.- Overrides:
-
hashCodeв классеObject - Требования реализации:
- Неявная реализация возвращает значение хэш-кода, полученное путем объединения соответствующих хэшей каждого компонента. Точный алгоритм, используемый в неявной реализации, не определен и может изменяться в рамках указанных выше ограничений. Результирующее целое число не должно оставаться постоянным от одного выполнения приложения к другому, даже если хэши значений компонентов оставались бы постоянными таким образом. Кроме того, компонент примитивного типа может вносить свои биты в хэш-код по-другому, чем
hashCodeего оберточного примитивного класса. - Возвращает:
- значение хэш-кода для этой записи.
- См. также:
toString
public abstract String toString()
Object.toString(), метод toString возвращает строку, которая "текстово представляет" эту запись. Результат должен быть кратким, но информативным представлением, удобным для чтения человеком. В дополнение к этому общему соглашению, классы записей должны дополнительно участвовать в инварианте, что любые две записи, которые равны, должны генерировать равные строки. Этот инвариант обязательно ослабляется в редких случаях, когда соответствующие равные значения компонентов могут не генерировать равные строки для себя.
- Overrides:
-
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Record.html