TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #1368 3.16K
В Java можно столкнуться с ситуацией, когда поле final кажется имеющим два разных значения. Рассмотрим такой пример:

void main() {
var after = new Final(this::before);

IO.println("After value=" + after.value);
}

private void before(Final before){
IO.println("Before value=" + before.value);
}

class Final {
final int value;

Final(Consumer<? super Final> listener) {
listener.accept(this);
value = 123;
}
}


Результат выполнения будет таким:

Before value=0  
After value=123


Это пример утечки this.

JEP 401 называет это larval object leakage — ситуация, когда объект, ещё не до конца инициализированный, "просачивается" из конструктора и используется раньше времени.

В JDK 24 в рамках JEP о гибких телах конструкторов (Flexible Constructor Bodies) эта проблема решается следующим образом:

Код в начале конструктора не должен использовать this, кроме как для инициализации полей, у которых нет своих инициализаторов.


Иначе говоря, в начальной части конструктора теперь нельзя "утечь" наружу с this, пока объект не готов

👉 Java Portal
  • 👍 19
  • 🔥 1
More from @java_iibrary
  1. Oct 3, 2026💡 Предпочитайте делегирование наследованию: отношение «является» тесно связывает ваш клас…
  2. Oct 2, 2026🚀 Spring Boot 4: переименовано свойство преобразования исключений ✅ Было: spring.dao.exce…
  3. Oct 2, 2026Процесс ≠ Поток ≠ Виртуальный поток. Эти понятия часто путают, хотя они решают разные зада…
  4. Oct 1, 2026Когда Java-стектрейс оказался длиннее контекста ИИ 👀 👉 Java Portal
  5. Oct 1, 2026Spring Boot 4: приближение срока истечения SSL-сертификатов больше не меняет статус health…
  6. Sep 30, 2026Почему один и тот же Java-файл .class запускается на Windows, Linux и macOS без перекомпил…
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 →