Language 中級

super()またはthis()を呼び出す前に値の検証や計算を行う。

✕ Java 8
class Square extends Shape {
    Square(double side) {
        super(side, side);
        // can't validate BEFORE super!
        if (side <= 0)
            throw new IAE("bad");
    }
}
✓ Java 25+
class Square extends Shape {
    Square(double side) {
        if (side <= 0)
            throw new IAE("bad");
        super(side, side);
    }
}
このコードに問題がありますか? お知らせください。

フェイルファスト

スーパークラスのコンストラクタが実行される前に引数を検証できます。

🔢

先に計算

super()を呼び出す前に値を導出してデータを準備できます。

🚫

回避策不要

制限を回避するための静的ヘルパーメソッドやファクトリパターンが不要になります。

旧来のアプローチ
super()の後でバリデーション
モダンなアプローチ
super()の前にコードを記述
JDKバージョン
25
難易度
中級
柔軟なコンストラクタ本体
利用可能

JDK 25 LTSでファイナライズ(JEP 513、2025年9月)

Java 25はsuper()が最初の文でなければならないという制限を解除します。親コンストラクタに処理を委譲する前に、引数の検証、派生値の計算、状態のセットアップが可能になります。

共有 𝕏 🦋 in