Spec-Zone.ru › OpenJDK 21

Класс Record

java.lang.Object
java.lang.Record
public abstract class Record extends Object
Это общий базовый класс всех записываемых классов языка Java.

Дополнительную информацию о записях, включая описания неявно объявленных методов, синтезируемых компилятором, можно найти в разделе 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:
Класс записи, который implements Serializable, считается сериализуемой записью. Сериализуемые записи сериализуются и десериализуются иначе, чем обычные сериализуемые объекты. При десериализации вызывается канонический конструктор записи для создания объекта записи. Некоторые методы, связанные с сериализацией, такие как readObject и writeObject, игнорируются для сериализуемых записей. Дополнительную информацию о сериализуемых записях можно найти в Спецификации сериализации объектов Java, раздел 1.13, "Сериализация записей". Структура класса записи может быть получена во время выполнения с помощью рефлексии. Смотрите Class.isRecord() и Class.getRecordComponents() для получения более подробной информации.
См. Спецификацию языка Java:
8.10 Типы записей
С:
16
Внешние спецификации
  • Спецификация сериализации объектов Java

Краткое описание конструкторов

Record()
Модификатор Конструктор Описание
protected
Конструктор для вызова в классах записей.

Краткое описание методов

Модификатор и тип Метод Описание
abstract boolean equals(Object obj)
Указывает, равен ли данный объект другому.
abstract int hashCode()
Возвращает значение хэш-кода для записи.
abstract String toString()
Возвращает строковое представление записи.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

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 в противном случае.
См. также:
  • Objects.equals(Object,Object)

hashCode

public abstract int hashCode()
Возвращает значение хэш-кода для записи. Удовлетворяет общему соглашению Object.hashCode. Для записей поведение хэширования ограничено уточнённым соглашением Record.equals, так что любые две записи, созданные из одних и тех же компонентов, должны иметь одинаковый хэш-код.
Overrides:
hashCode в классе Object
Требования реализации:
Неявная реализация возвращает значение хэш-кода, вычисленное путём объединения соответствующих хэш-кодов от каждого компонента. Точный алгоритм, используемый в неявной реализации, не определён и может меняться в рамках вышеуказанных ограничений. Результирующее целое число не обязательно должно оставаться постоянным от одного выполнения приложения к другому выполнению того же приложения, даже если хэши значений компонентов остаются постоянными таким образом. Кроме того, компонент примитивного типа может вносить свои биты в хэш-код по-разному, чем hashCode его оберточного класса примитивного типа.
Возвращает:
значение хэш-кода для этой записи.
См. также:
  • Object.hashCode()

toString

public abstract String toString()
Возвращает строковое представление записи. В соответствии с общим соглашением Object.toString(), метод toString возвращает строку, которая "текстуально представляет" эту запись. Результат должен быть лаконичным, но информативным представлением, легко читаемым человеком.

В дополнение к этому общему соглашению, классы записей должны дополнительно участвовать в инвариантном свойстве, что любые две записи, которые равны, должны генерировать одинаковые строки. Это инвариантное свойство обязательно ослаблено в редких случаях, когда соответствующие равные значения компонентов могут не генерировать одинаковые строки для себя.

Overrides:
toString в классе Object
Требования реализации:
Неявная реализация возвращает строку, которая содержит имя класса записи, имена компонентов записи и строковые представления значений компонентов, чтобы выполнить контракт этого метода. Точный формат, генерируемый этой неявной реализацией, может изменяться, поэтому приложение не должно анализировать представленный синтаксис для извлечения значений компонентов записи.
Возвращает:
строковое представление объекта.
См. также:
  • Object.toString()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API