模块 java.base
 java.lang

类 Record

java.lang.Object
java.lang.Record

public abstract class Record extends Object
这是所有 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 注意:
implements Serializable 据说是一个记录类序列化记录.可序列化记录的序列化和反序列化方式与普通可序列化对象不同。在反序列化过程中,调用记录的规范构造函数来构造记录对象。对于可序列化记录,某些与序列化相关的方法(例如 readObject 和 writeObject)将被忽略。有关可序列化记录的更多信息可以在 Java 对象序列化规范, Section 1.13, "Serialization of Records" 中找到。记录类结构可以在运行时通过反射获得。有关详细信息,请参阅 Class.isRecord() Class.getRecordComponents()
Java 语言规范:
8.10 记录类型
自从:
16
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
    protected
    要调用的记录类的构造方法。
  • 方法总结

    修饰符和类型
    方法
    描述
    abstract boolean
    equals(Object obj)
    指示某个其他对象是否“等于”这个对象。
    abstract int
    返回记录的哈希码值。
    abstract String
    返回记录的字符串表示形式。

    在类 java.lang.Object 中声明的方法

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • Record

      protected Record()
      要调用的记录类的构造方法。
  • 方法详情

    • equals

      public abstract boolean equals(Object  obj)
      指示某个其他对象是否“等于”这个对象。除了 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 时,组件才被视为相等。
      • 如果组件是原始类型,则使用相应的原始包装类 PWint 的相应包装类是 java.lang.Integer,依此类推),当且仅当 PW.compare(this.c, r.c) 将返回 0 时,组件才被认为是相等的。
      除了上述语义之外,隐式提供的实现中使用的精确算法是未指定的,并且可能会发生变化。实现可能会或可能不会使用对列出的特定方法的调用,并且可能会或可能不会按照组件声明的顺序执行比较。
      参数:
      obj - 要比较的参考对象。
      返回:
      true 如果此记录等于参数; false否则。
      参见:
    • hashCode

      public abstract int hashCode()
      返回记录的哈希码值。遵守 Object.hashCode 的总合同。对于记录,散列行为受 Record.equals 的细化合约约束,因此从相同组件创建的任何两条记录必须具有相同的散列码。
      重写:
      hashCode 在类 Object
      实现要求:
      隐式提供的实现返回一个哈希码值,该哈希码值是通过组合来自每个组件的适当哈希值得出的。隐式提供的实现中使用的精确算法未指定,并可能在上述限制内发生变化。结果整数不需要从应用程序的一次执行到同一应用程序的另一次执行保持一致,即使组件值的散列以这种方式保持一致。此外,原始类型的组件可能会以不同于其原始包装类的 hashCode 的方式将其位贡献给哈希码。
      返回:
      此记录的哈希码值。
      参见:
    • toString

      public abstract String  toString()
      返回记录的字符串表示形式。根据 Object.toString() 的一般约定,toString 方法返回一个“以文本方式表示”此记录的字符串。结果应该是简洁但信息丰富的表示形式,易于人们阅读。

      除了这个一般契约之外,记录类必须进一步参与不变量,即任何两个 equal 的记录必须产生相等的字符串。在极少数情况下,相应的相等组件值可能无法为它们自己生成相等的字符串,因此必须放宽此不变量。

      重写:
      toString 在类 Object
      实现要求:
      隐式提供的实现返回一个字符串,其中包含记录类的名称、记录的组件名称以及组件值的字符串表示形式,以履行此方法的约定。这种隐式提供的实现产生的精确格式可能会发生变化,因此应用程序不应解析当前语法以恢复记录组件值。
      返回:
      对象的字符串表示形式。
      参见: