Spec-Zone.ru › OpenJDK 24

Класс 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, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Record.html

Spec-Zone.ru

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