< prev index next >

src/java.base/share/classes/java/lang/Record.java

Print this page

        

*** 90,120 **** @jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS, essentialAPI=true) public abstract class Record { /** * Indicates whether some other object is "equal to" this one. In addition ! * to the general contract of {@link Object#equals(Object)}, ! * record classes must further participate in 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: * <pre> * R copy = new R(r.c1(), r.c2(), ..., r.cn()); * </pre> * then it must be the case that {@code r.equals(copy)}. * * @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 the corresponding component ! * of the argument, according to {@link java.util.Objects#equals(Object,Object)} ! * for components whose types are reference types, and according to the semantics ! * of the {@code equals} method on the corresponding primitive wrapper type. * * @see java.util.Objects#equals(Object,Object) * * @param obj the reference object with which to compare. ! * @return {@code true} if this object is the same as the obj * argument; {@code false} otherwise. */ @Override public abstract boolean equals(Object obj); --- 90,140 ---- @jdk.internal.PreviewFeature(feature=jdk.internal.PreviewFeature.Feature.RECORDS, essentialAPI=true) public abstract class Record { /** * Indicates whether some other object is "equal to" this one. In addition ! * to the general contract of {@link Object#equals(Object) Object.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: * <pre> * R copy = new R(r.c1(), r.c2(), ..., r.cn()); * </pre> * then it must be the case that {@code r.equals(copy)}. * * @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 ! * the corresponding component of the argument; otherwise, {@code ! * false} is returned. Equality of a component {@code c} is ! * determined as follows: ! * <ul> ! * ! * <li> If the component is of a reference type, the component is ! * considered equal if and only if {@link ! * java.util.Objects#equals(Object,Object) ! * Objects.equals(this.c(), r.c()} would return {@code true}. ! * ! * <li> If the component is of a primitive type, using the ! * corresponding primitive wrapper class {@code PW} (the wrapper ! * class {@code java.lang.Integer} for {@code int}, and so on) the ! * component is considered equal if and only if {@code ! * PW.valueOf(this.c()).equals(PW.valueOf(r.c()))} would return ! * {@code true}. ! * ! * </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. * * @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 * argument; {@code false} otherwise. */ @Override public abstract boolean equals(Object obj);
< prev index next >