- 直系の既知のサブクラス:
UnixDomainPrincipal
コンパイラによって合成される暗黙的に宣言されたメソッドの説明など、レコードの詳細は、「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
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
-
コンストラクタの詳細
-
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
を返す場合にのみ等しいとみなされます。 - コンポーネントがプリミティブ・タイプの場合、対応するプリミティブ・ラッパー・クラス
PW
(int
の対応するラッパー・クラスはjava.lang.Integer
です。)を使用すると、PW.compare(this.c, r.c)
が0
を返す場合にのみコンポーネントが同等とみなされます。
- コンポーネントが参照タイプの場合、コンポーネントは、
- パラメータ:
obj
- 比較対象の参照オブジェクト。- 戻り値:
- このレコードが引数と等しい場合は
true
、そうでない場合はfalse
。 - 関連項目:
-
hashCode
public abstract int hashCode()レコードのハッシュ・コード値を返します。Object.hashCode
の一般規約に従います。 レコードの場合、ハッシュ動作はRecord.equals
の絞込み済規約によって制約されるため、同じコンポーネントから作成される2つのレコードには同じハッシュ・コードが必要です。- オーバーライド:
hashCode
、クラスObject
- 実装要件:
- 暗黙的に提供される実装は、各コンポーネントから適切なハッシュを組み合せることで導出されたハッシュ・コード値を返します。 暗黙的に提供される実装で使用される正確なアルゴリズムは指定されず、前述の制限内で変更される可能性があります。 コンポーネント値のハッシュがこの方法で一貫性を維持する必要があっても、結果の整数は、アプリケーションのある実行から同じアプリケーションの別の実行への一貫性を維持する必要はありません。 また、プリミティブ型のコンポーネントは、そのプリミティブ・ラッパー・クラスの
hashCode
とは異なる方法でビットをハッシュ・コードに提供できます。 - 戻り値:
- このレコードのハッシュ・コード値。
- 関連項目:
-
toString
public abstract String toString()レコードの文字列表現を返します。Object.toString()
の一般規約に従って、toString
メソッドはこのレコードを"テキストによる表現"が返す文字列を返します。 この結果は、人間が読める簡潔で有益な情報であるべきです。この一般規約に加えて、レコード・クラスは、equalであるすべてのレコードが同等の文字列を生成する必要があるという不変性にも参加する必要があります。 対応するequalコンポーネント値がそれ自体の等価文字列の生成に失敗することがあるまれなケースでは、この不変性は常に緩和されます。
-