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メソッド