Module java.base
Package java.lang

Class Record

java.lang.Object
java.lang.Record

public abstract class Record extends Object
这是所有Java语言记录类的通用基类。

有关记录的更多信息,包括编译器合成的隐式声明方法的描述,可以在《Java语言规范》第8.10节中找到。

一个记录类是一个浅不可变的、透明的载体,用于存储一组固定的值,称为记录组件。Java语言提供了声明记录类的简洁语法,其中记录组件在记录头中声明。在记录头中声明的记录组件列表形成记录描述符

记录类具有以下强制成员:一个规范构造函数,必须提供至少与记录类一样多的访问权限,并且其描述符与记录描述符相同;与每个组件对应的私有最终字段,其名称和类型与组件的名称和类型相同;与每个组件对应的公共访问器方法,其名称和返回类型与组件的名称和类型相同。如果在记录的主体中没有显式声明这些成员,那么将提供这些成员的隐式实现。

规范构造函数的隐式声明具有与记录类相同的可访问性,并从相应的构造函数参数初始化组件字段。访问器方法的隐式声明返回相应组件字段的值。从所有组件字段派生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注释:
实现了Serializable的记录类称为可序列化记录。可序列化记录的序列化和反序列化方式与普通可序列化对象不同。在反序列化期间,将调用记录的规范构造函数来构造记录对象。对于可序列化记录,将忽略某些与序列化相关的方法,如readObject和writeObject。有关可序列化记录的更多信息,请参阅《Java对象序列化规范》第1.13节“记录的序列化”。
参见Java语言规范:
8.10 记录类型
自JDK版本:
16
外部规范
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Record()
    记录类调用的构造函数。
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract boolean
    equals(Object obj)
    表示某个对象是否与此对象相等。
    abstract int
    返回记录的哈希码值。
    abstract String
    返回记录的字符串表示。

    Methods declared in class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • Record

      protected Record()
      记录类调用的构造函数。
  • Method Details

    • 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不同的方式为哈希码做出贡献,因此生成的整数在一个应用程序的执行到另一个应用程序的执行之间可能不一致。此外,原始类型的组件可能会以与其原始包装类的hashCode不同的方式为哈希码做出贡献。
      返回:
      此记录的哈希码值。
      参见:
    • toString

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

      除了这个一般约定外,记录类还必须进一步遵守以下不变性:任何两个相等的记录必须产生相等的字符串。在相应的相等组件值可能无法为自身产生相等字符串的罕见情况下,此不变性必须放宽。

      覆盖:
      toString 在类 Object
      实现要求:
      隐式提供的实现返回一个字符串,其中包含记录类的名称、记录的组件名称和组件值的字符串表示,以满足此方法的合同。此隐式提供的实现生成的确切格式可能会更改,因此应用程序不应解析当前语法以恢复记录组件值。
      返回:
      对象的字符串表示。
      参见: