Spec-Zone.ru › OpenJDK 27

Класс Record

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

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

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

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

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

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

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

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс этого Object во время выполнения.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.

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

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.
См. также:
  • Objects.equals(Object,Object)

hashCode

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

toString

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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