プロジェクト

全般

プロフィール

Javaプログラミング record型の活用

record型概要

イミュータブルで、何らかのデータを表現し、抱えるフィールドの値が一致するレコード同士を同値と判定するオブジェクトを簡潔に表現するデータ型です。

例えば、名前(文字列)、住所(文字列)、生まれた西暦年(整数)を持つPersonをrecord型で定義します。

public record Person(String name, String address, int birthYear) {}

このrecord型とほぼ等価なclassを定義すると次のようになります。

import java.util.Objects;

public final class Person {
    private final String name;
    private final String address;
    private final int birthYear;

    public Person(String name, String address, int birthYear) {
        this.name = name;
        this.address = address;
        this.birthYear = birthYear;
    }

    public String name() {
        return name;
    }
    public String address() {
        return address;
    }
    public int birthYear() {
        return birthYear;
    }

    public final boolean equals(Object o) {
        return o instanceof Person other &&
            Objects.equals(name, other.name) &&
            Objects.equals(address, other.equals) &&
            Integer.compare(birthYear, other.birthYear) == 0; 
    }

    public final int hashCode() {
        return Objects.hash(name, address, birthYear);
    }

    public final String toString() {
        return String.format("Person[name=%s, address=%s, birthYear=%d]", name, address, birthYear);
    }

}
  • finalな(継承不可能)
  • 不変フィールド
  • 全てのフィールドを設定するコンストラクタ
  • 各フィールドのgetterメソッド(メソッド名はフィールド名に等しい)
  • equalsメソッド
  • hashCodeメソッド
  • toStringメソッド


3ヶ月前に更新