TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #1837 2.12K
Гибкие тела конструкторов в Java 25

→ Одна из самых заметных фич, введённых в Java 25.
→ Основная идея: ослабить строгие правила, согласно которым super(...) или this(...) обязательны как первая инструкция в конструкторе.

→ А что, если нужно что-то сделать с аргументами перед передачей их суперклассу?
Допустим, мы хотим проверить число перед вызовом super(). Раньше это было невозможно, так как Java строго требовала, чтобы первой строкой любого конструктора был вызов другого конструктора в том же классе (this(...)) или конструктора суперкласса (super(...)).

В приведённом примере:

→ До Java 25, если конструктору PositiveNumber нужно было передать val в его суперкласс BaseNumber (который требует val в конструкторе), super(val) должен был быть первой строкой. Любой код перед super() приводил к ошибке: "super() должен быть первой инструкцией".

→ Отложенная проверка: В примере мы не могли проверить val до его использования для инициализации BaseNumber, что нарушало принцип "fail-fast". Если val = -1, BaseNumber всё равно инициализировался с -1, прежде чем PositiveNumber мог бы выбросить ошибку.

→ Неуклюжие обходные пути: Чтобы проверить аргумент заранее, приходилось использовать менее читаемые схемы (например, super(staticMethodForValidation(val))) или сложную делегацию конструкторов.

⇒ С Java 25

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

→ Настоящая проверка "fail-fast": Если val = -1, IllegalArgumentException выбрасывается до вызова super(val), конструктор BaseNumber не выполняется с некорректным значением, и создание объекта прерывается на раннем этапе.

→ Более безопасное создание объектов: Суперкласс инициализируется только с корректными, предварительно обработанными аргументами, что делает объекты более надёжными и безопасными.

👉 Java Portal
  • 👍 8
  • ❤ 2
More from @java_iibrary
  1. Sep 29, 2026Эволюция языков программирования 1940-е → Машинный код ⬇️ 1950-е → Ассемблер ⬇️ 1960-е → F…
  2. Sep 29, 2026Большинство Java-разработчиков используют эти термины каждый день. Удивительно, но многие…
  3. Sep 28, 2026💡 Java: не создавайте ресурсоёмкие объекты, пока они действительно не понадобятся. ✅ Иниц…
  4. Sep 28, 2026Проблема в продакшене. Приложение зависло. Вы запускаете: jstack <pid> Через несколько сек…
  5. Sep 27, 2026Java-разработчики, CopyOnWriteArrayList создаёт копию всего внутреннего массива при каждом…
  6. Sep 27, 2026Java-разработчики, ConcurrentHashMap потокобезопасен. Но он не блокирует всю коллекцию при…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →