コンパクト正準コンストラクタ
パラメータリストを繰り返さずにレコードフィールドを検証・正規化する。
コード比較
✕ Java 16
public record Person(String name,
List<String> pets) {
// Full canonical constructor
public Person(String name,
List<String> pets) {
Objects.requireNonNull(name);
this.name = name;
this.pets = List.copyOf(pets);
}
}
✓ Java 16+
public record Person(String name,
List<String> pets) {
// Compact constructor
public Person {
Objects.requireNonNull(name);
pets = List.copyOf(pets);
}
}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
繰り返しの削減
パラメータリストを繰り返したり、各フィールドを手動で代入する必要がありません。
バリデーション
nullチェック、範囲バリデーション、防御的コピーに最適です。
明確な意図
コンパクトな構文により、ボイラープレートではなくバリデーションが強調されます。
旧来のアプローチ
明示的なコンストラクタによる検証
モダンなアプローチ
コンパクトコンストラクタ
JDKバージョン
16
難易度
中級
JDKサポート
コンパクト正準コンストラクタ
利用可能
JDK 16(2021年3月)以降、広く利用可能
仕組み
レコードはパラメータリストとフィールドへの代入を省略したコンパクト正準コンストラクタを宣言できます。検証ロジックの実行後、コンパイラが自動的にパラメータをフィールドに代入します。事前条件チェック、防御的コピー、正規化に最適です。
関連ドキュメント