Класс 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, 2023, 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/21/docs/api/java.base/java/lang/Record.html