Что такое Effectively Final в Java и где используется?

В Java термин "effectively final" относится к локальным переменным, которые не объявлены с ключевым словом final, но после инициализации их значение не изменяется.

Короткий ответ

Что ответить на собеседовании

В Java термин "effectively final" относится к локальным переменным, которые не объявлены с ключевым словом final, но после инициализации их значение не изменяется. То есть, переменная ведёт себя как final, хотя явно не помечена этим модификатором.

Подробный разбор

Ответ с пояснениями

В Java термин "effectively final" относится к локальным переменным, которые не объявлены с ключевым словом final, но после инициализации их значение не изменяется. То есть, переменная ведёт себя как final, хотя явно не помечена этим модификатором.

Это важно, например, при использовании лямбда-выражений и анонимных классов, где можно использовать только те локальные переменные, которые являются final или effectively final. Если попытаться изменить такую переменную после использования в лямбде, компилятор выдаст ошибку.

Пример:

int x = 10; // effectively final, если не изменять
Runnable r = () -> System.out.println(x);
r.run();

// Если добавить строку x = 20; после объявления лямбды, будет ошибка компиляции

Таким образом, "effectively final" позволяет писать более лаконичный код без явного указания final, сохраняя при этом безопасность и предсказуемость поведения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее