Гибкое тело конструктора
Валидировать и вычислять значения до вызова 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
Гибкое тело конструктора
Доступно
Финализировано в JDK 25 LTS (JEP 513, сент. 2025).
Как это работает
Java 25 снимает ограничение, согласно которому super() должен быть первым оператором. Теперь можно валидировать аргументы, вычислять производные значения и подготавливать состояние перед делегированием родительскому конструктору.
Связанная документация
Доказательство