8238239: java.lang.Record spec clarifications
Reviewed-by: psandoz
This commit is contained in:
parent
080c67f096
commit
f0cdbbe120
@ -109,7 +109,7 @@ public abstract class Record {
|
||||
* @implSpec
|
||||
* The implicitly provided implementation returns {@code true} if
|
||||
* 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
|
||||
* as this record, and each component of this record is equal to
|
||||
* the corresponding component of the argument; otherwise, {@code
|
||||
* false} is returned. Equality of a component {@code c} is
|
||||
* determined as follows:
|
||||
@ -130,46 +130,70 @@ public abstract class Record {
|
||||
*
|
||||
* </ul>
|
||||
*
|
||||
* The implicitly provided implementation conforms to the
|
||||
* semantics described above; the implementation may or may not
|
||||
* accomplish this by using calls to the particular methods
|
||||
* listed.
|
||||
* Apart from the semantics described above, the precise algorithm
|
||||
* used in the implicitly provided implementation is unspecified
|
||||
* and is subject to change. The implementation may or may not use
|
||||
* calls to the particular methods listed, and may or may not
|
||||
* perform comparisons in the order of component declaration.
|
||||
*
|
||||
* @see java.util.Objects#equals(Object,Object)
|
||||
*
|
||||
* @param obj the reference object with which to compare.
|
||||
* @return {@code true} if this object is equal to the
|
||||
* @return {@code true} if this record is equal to the
|
||||
* argument; {@code false} otherwise.
|
||||
*/
|
||||
@Override
|
||||
public abstract boolean equals(Object obj);
|
||||
|
||||
/**
|
||||
* Returns a hash code value for the record.
|
||||
* Obeys the general contract of {@link Object#hashCode Object.hashCode}.
|
||||
* For records, hashing behavior is constrained by the refined contract
|
||||
* of {@link Record#equals Record.equals}, so that any two records
|
||||
* created from the same components must have the same hash code.
|
||||
*
|
||||
* @implSpec
|
||||
* The implicitly provided implementation returns a hash code value derived
|
||||
* by combining the hash code value for all the components, according to
|
||||
* {@link Object#hashCode()} for components whose types are reference types,
|
||||
* or the primitive wrapper hash code for components whose types are primitive
|
||||
* types.
|
||||
* by combining appropriate hashes from each component.
|
||||
* The precise algorithm used in the implicitly provided implementation
|
||||
* is unspecified and is subject to change within the above limits.
|
||||
* The resulting integer need not remain consistent from one
|
||||
* execution of an application to another execution of the same
|
||||
* application, even if the hashes of the component values were to
|
||||
* remain consistent in this way. Also, a component of primitive
|
||||
* type may contribute its bits to the hash code differently than
|
||||
* the {@code hashCode} of its primitive wrapper class.
|
||||
*
|
||||
* @see Object#hashCode()
|
||||
*
|
||||
* @return a hash code value for this object.
|
||||
* @return a hash code value for this record.
|
||||
*/
|
||||
@Override
|
||||
public abstract int hashCode();
|
||||
|
||||
/**
|
||||
* Obeys the general contract of {@link Object#toString Object.toString}.
|
||||
* Returns a string representation of the record.
|
||||
* In accordance with the general contract of {@link Object#toString()},
|
||||
* the {@code toString} method returns a string that
|
||||
* "textually represents" this record. The result should
|
||||
* be a concise but informative representation that is easy for a
|
||||
* person to read.
|
||||
* <p>
|
||||
* In addition to this general contract, record classes must further
|
||||
* participate in the invariant that any two records which are
|
||||
* {@linkplain Record#equals(Object) equal} must produce equal
|
||||
* strings. This invariant is necessarily relaxed in the rare
|
||||
* case where corresponding equal component values might fail
|
||||
* to produce equal strings for themselves.
|
||||
*
|
||||
* @implSpec
|
||||
* 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 {@link Object#toString()} for components
|
||||
* whose types are reference types, and the primitive wrapper {@code toString}
|
||||
* method for components whose types are primitive types.
|
||||
* The implicitly provided implementation returns a string which
|
||||
* contains the name of the record class, the names of components
|
||||
* of the record, and string representations of component values,
|
||||
* so as to fulfill the contract of this method.
|
||||
* The precise format produced by this implicitly provided implementation
|
||||
* is subject to change, so the present syntax should not be parsed
|
||||
* by applications to recover record component values.
|
||||
*
|
||||
* @see Object#toString()
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user