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().

🧹

Никаких обходных путей

Больше не нужны статические вспомогательные методы или паттерн Factory для обхода ограничения.

Старый подход
Валидация после super()
Современный подход
Код перед super()
Начиная с JDK
25
Сложность
Средний
Гибкое тело конструктора
Доступно

Финализировано в JDK 25 LTS (JEP 513, сент. 2025).

Java 25 снимает ограничение, согласно которому super() должен быть первым оператором. Теперь можно валидировать аргументы, вычислять производные значения и подготавливать состояние перед делегированием родительскому конструктору.