Spec-Zone.ru › OpenJDK 25

Класс 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, игнорируются для сериализуемых записей. Дополнительные сведения о сериализуемых записях см. в Спецификации сериализации объектов 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()
Возвращает строковое представление записи.

Методы, объявленные в классе 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).
Переопределяет:
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Record.html

Spec-Zone.ru

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