データクラスのためのレコード
イミュータブルなデータ保持クラスの30行以上のボイラープレートが1行に置き換わる。
コード比較
✕ Java 8
public class Point {
private final int x, y;
public Point(int x, int y) { ... }
public int getX() { return x; }
public int getY() { return y; }
// equals, hashCode, toString
}
✓ Java 16+
public record Point(int x, int y) {}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
1行の定義
コンストラクタ、ゲッター、equals、hashCode、toStringが1行に集約されます。
デフォルトでイミュータブル
すべてのフィールドはfinal — セッターによる罠がありません。
パターンとの親和性
レコードはswitchとinstanceofの分解パターンで利用できます。
旧来のアプローチ
冗長なPOJO
モダンなアプローチ
record
JDKバージョン
16
難易度
初級
JDKサポート
データクラスのためのレコード
利用可能
JDK 16(2021年3月)以降、広く利用可能
仕組み
レコードはコンストラクタ、アクセサ(x()、y())、equals()、hashCode()、toString()を自動生成します。設計上イミュータブルであり、DTO、値オブジェクト、パターンマッチングに最適です。
関連ドキュメント