Класс Record
- Прямые известные подклассы:
UnixDomainPrincipal
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).- 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, 2021, 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/17/docs/api/java.base/java/lang/Record.html