モジュール java.base
パッケージ java.lang

クラスRecord

java.lang.Object
java.lang.Record

public abstract class Record extends Object
すべてのJava言語レコード・クラスの共通のベース・クラスです。

コンパイラによって合成される暗黙的に宣言されたメソッドの説明など、レコードの詳細は、「Java言語仕様」の8.10の項を参照してください。

「レコード・クラス」は、「レコード・コンポーネント」と呼ばれる、固定された値セットの透過的なキャリアである高度な不変性があります。 Java言語には、レコード・クラスを宣言するための簡潔な構文が用意されており、レコード・コンポーネントはレコード・ヘッダーで宣言されます。 レコード・ヘッダーで宣言されたレコード・コンポーネントのリストは、「レコード記述子」です。

レコード区分に次の必須メンバーがあります: 少なくともレコード・クラスと同じ数のアクセス権を提供する必要があり、その記述子がレコード記述子と同じである必要がある「正規コンストラクタ」、各コンポーネントに対応するprivate finalフィールド(名前とタイプはコンポーネントの名前とタイプと同じ)、各コンポーネントに対応するpublicアクセッサ・メソッド(名前と戻り値の型はコンポーネントのものと同じ)。 レコードの本文で明示的に宣言されていない場合、これらのメンバーの暗黙的な実装が行われます。

正規のコンストラクタの暗黙的な宣言は、レコード・クラスと同じアクセシビリティを持ち、対応するコンストラクタ引数からコンポーネント・フィールドを初期化します。 アクセッサ・メソッドの暗黙的な宣言では、対応するコンポーネント・フィールドの値が戻されます。 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オブジェクト直列化仕様セクション1.13、"レコードの直列化"」を参照してください。レコード・クラス構造は、実行時にリフレクションによって取得できます。 詳細は、Class.isRecord()およびClass.getRecordComponents()を参照してください。
Java言語仕様を参照してください:
8.10 レコード・タイプ
導入されたバージョン:
16
外部仕様