java.lang.Object
java.lang.Record
这是所有 Java 语言记录类的公共基类。
有关记录的更多信息,包括编译器合成的隐式声明方法的说明,请参见第 8.10 节Java 语言规范.
record class 是一组固定值的浅不可变透明载体,称为 record components 。 Java 语言提供了用于声明记录类的简明语法,其中记录组件在记录头中声明。记录头中声明的记录组件列表形成 record descriptor 。
记录类具有以下强制成员: canonical constructor ,它必须至少提供与记录类一样多的访问权限,并且其描述符与记录描述符相同;每个组件对应一个private final字段,名称和类型与组件相同;每个组件对应一个公共访问器方法,其名称和返回类型与组件相同。如果未在记录正文中明确声明,则提供这些成员的隐式实现。
规范构造函数的隐式声明与记录类具有相同的可访问性,并从相应的构造函数参数初始化组件字段。访问器方法的隐式声明返回相应组件字段的值。 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 注意:
implementsSerializable据说是一个记录类序列化记录.可序列化记录的序列化和反序列化方式与普通可序列化对象不同。在反序列化过程中,调用记录的规范构造函数来构造记录对象。对于可序列化记录,某些与序列化相关的方法(例如 readObject 和 writeObject)将被忽略。有关可序列化记录的更多信息可以在 Java 对象序列化规范, Section 1.13, "Serialization of Records" 中找到。记录类结构可以在运行时通过反射获得。有关详细信息,请参阅Class.isRecord()和Class.getRecordComponents()。- 看Java 语言规范:
-
8.10 记录类型
- 自从:
- 16
-
构造方法总结
构造方法 -
方法总结
-
构造方法详细信息
-
Record
protected Record()要调用的记录类的构造方法。
-
-
方法详情
-
equals
指示某个其他对象是否“等于”这个对象。除了Object.equals的一般契约之外,记录类还必须遵守以下不变性,即当通过将记录组件访问器方法的结果传递给规范构造函数来“复制”记录实例时,如下所示:R copy = new R(r.c1(), r.c2(), ..., r.cn());
那么它必须是这种情况那r.equals(copy)。- 重写:
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否则。- 参见:
-
hashCode
public abstract int hashCode()返回记录的哈希码值。遵守Object.hashCode的总合同。对于记录,散列行为受Record.equals的细化合约约束,因此从相同组件创建的任何两条记录必须具有相同的散列码。 -
toString
返回记录的字符串表示形式。根据Object.toString()的一般约定,toString方法返回一个“以文本方式表示”此记录的字符串。结果应该是简洁但信息丰富的表示形式,易于人们阅读。除了这个一般契约之外,记录类必须进一步参与不变量,即任何两个 equal 的记录必须产生相等的字符串。在极少数情况下,相应的相等组件值可能无法为它们自己生成相等的字符串,因此必须放宽此不变量。
-