クラス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
外部仕様
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    コールするレコード・クラスのコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    abstract int
    レコードのハッシュ・コード値を返します。
    abstract String
    レコードの文字列表現を返します。

    クラスオブジェクトで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • 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コンポーネント値がそれ自体の等価文字列の生成に失敗することがあるまれなケースでは、この不変性は常に緩和されます。

      オーバーライド:
      toString、クラスObject
      実装要件:
      暗黙的に提供される実装は、このメソッドの規約を満たすために、レコード・クラスの名前、レコードのコンポーネントの名前、およびコンポーネント値の文字列表現を含む文字列を返します。 この暗黙的に提供される実装によって生成される正確な形式は変更される可能性があるため、レコード・コンポーネント値をリカバリするためにアプリケーションで現在の構文を解析しないでください。
      戻り値:
      このオブジェクトの文字列表現
      関連項目: