Module java.base
Package java.lang

# Class Record

≠
public abstract class Record
extends java.lang.Object
Comparing jdk-master and valhalla-csr-open

public abstract class Record extends Object
This is the common base class of all Java language record classes.

More information about records, including descriptions of the implicitly declared methods synthesized by the compiler, can be found in section 8.10 of The Java Language Specification .

A record class is a shallowly immutable, transparent carrier for a fixed set of values, called the record components . The Java language provides concise syntax for declaring record classes, whereby the record components are declared in the record header. The list of record components declared in the record header form the record descriptor .

A record class has the following mandated members: a canonical constructor , which must provide at least as much access as the record class and whose descriptor is the same as the record descriptor; a private final field corresponding to each component, whose name and type are the same as that of the component; a public accessor method corresponding to each component, whose name and return type are the same as that of the component. If not explicitly declared in the body of the record, implicit implementations for these members are provided.

The implicit declaration of the canonical constructor has the same accessibility as the record class and initializes the component fields from the corresponding constructor arguments. The implicit declaration of the accessor methods returns the value of the corresponding component field. The implicit declaration of the `Object.equals(Object)` , `Object.hashCode()` , and `Object.toString()` methods are derived from all of the component fields.

The primary reasons to provide an explicit declaration for the canonical constructor or accessor methods are to validate constructor arguments, perform defensive copies on mutable components, or normalize groups of components (such as reducing a rational number to lowest terms.)

For all record classes, the following invariant must hold: if a record R's components are `c1, c2, ... cn` , then if a record instance is copied as follows:

        R copy = new R(r.c1(), r.c2(), ..., r.cn());

then it must be the case that `r.equals(copy)` .

When preview features are enabled, `Record` is an abstract value classPREVIEW . Subclasses of `Record` can be either an identity classPREVIEW or a value classPREVIEW . See The Java Language Specification 8.1.1.5 Value ClassesPREVIEW .

API Note:
  A record class that `implements` `Serializable` is said to be a serializable record. Serializable records are serialized and deserialized differently than ordinary serializable objects. During deserialization the record's canonical constructor is invoked to construct the record object. Certain serialization-related methods, such as readObject and writeObject, are ignored for serializable records. More information about serializable records can be found in the Java Object Serialization Specification, Section 1.13, "Serialization of Records"., A record class structure can be obtained at runtime via reflection. See `Class.isRecord()` and `Class.getRecordComponents()` for more details.
See Java Language Specification:
  8.10 Record Classes
Since:
  16
External Specifications
  - Java Object Serialization Specification

## Constructors

- =
  protected Record()

## Methods

- =
  public abstract boolean equals(java.lang.Object arg0)
- =
  public abstract int hashCode()
- =
  public abstract java.lang.String toString()

## Summary

Differences
| Elements | Comments | Descriptions | Total
Added | Changed | Removed | Added | Changed | Removed | Added | Changed | Removed
--- | --- | --- | --- | --- | --- | --- | --- | ---
Record |  |  |  |  |  |  | 11 |  |  | 11
Total |  |  |  |  |  |  | 11 |  |  | 11