Language 中級

パラメータリストを繰り返さずにレコードフィールドを検証・正規化する。

✕ 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 16(2021年3月)以降、広く利用可能

レコードはパラメータリストとフィールドへの代入を省略したコンパクト正準コンストラクタを宣言できます。検証ロジックの実行後、コンパイラが自動的にパラメータをフィールドに代入します。事前条件チェック、防御的コピー、正規化に最適です。

共有 𝕏 🦋 in