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