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 public canonical constructor, 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 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).- API Note:
- A record class that implementsSerializableis 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 record serialization.
- See Java Language Specification:
- 
8.10 Record Types
- Since:
- 14
- 
Constructor SummaryConstructors Modifier Constructor Description protectedRecord()Constructor for record classes to call.
- 
Method SummaryModifier and Type Method Description abstract booleanequals(Object obj)Indicates whether some other object is "equal to" this one.abstract inthashCode()Obeys the general contract ofObject.hashCode.abstract StringtoString()Obeys the general contract ofObject.toString.
- 
Constructor Details- 
Recordprotected Record()Constructor for record classes to call.
 
- 
- 
Method Details- 
equalsIndicates whether some other object is "equal to" this one. In addition to the general contract ofObject.equals, record classes must further obey the invariant that when a record instance is "copied" by passing the result of the record component accessor methods to the canonical constructor, as follows:R copy = new R(r.c1(), r.c2(), ..., r.cn());then it must be the case thatr.equals(copy).- Overrides:
- equalsin class- Object
- Implementation Requirements:
- The implicitly provided implementation returns trueif and only if the argument is an instance of the same record type as this object, and each component of this record is equal to the corresponding component of the argument; otherwise,falseis returned. Equality of a componentcis determined as follows:-  If the component is of a reference type, the component is
 considered equal if and only if Objects.equals(this.c(), r.c()would returntrue.
-  If the component is of a primitive type, using the
 corresponding primitive wrapper class PW(the corresponding wrapper class forintisjava.lang.Integer, and so on), the component is considered equal if and only ifPW.valueOf(this.c()).equals(PW.valueOf(r.c()))would returntrue.
 
-  If the component is of a reference type, the component is
 considered equal if and only if 
- Parameters:
- obj- the reference object with which to compare.
- Returns:
- trueif this object is equal to the argument;- falseotherwise.
- See Also:
- Objects.equals(Object,Object)
 
- 
hashCodepublic abstract int hashCode()Obeys the general contract ofObject.hashCode.- Overrides:
- hashCodein class- Object
- Implementation Requirements:
- The implicitly provided implementation returns a hash code value derived
 by combining the hash code value for all the components, according to
 Object.hashCode()for components whose types are reference types, or the primitive wrapper hash code for components whose types are primitive types.
- Returns:
- a hash code value for this object.
- See Also:
- Object.hashCode()
 
- 
toStringObeys the general contract ofObject.toString.- Overrides:
- toStringin class- Object
- Implementation Requirements:
- The implicitly provided implementation returns a string that is derived
 from the name of the record class and the names and string representations
 of all the components, according to Object.toString()for components whose types are reference types, and the primitive wrappertoStringmethod for components whose types are primitive types.
- Returns:
- a string representation of the object.
- See Also:
- Object.toString()
 
 
-