Локальный класс может получить доступ к не конечной переменной в java 8

До Java 8 мы не смогли использовать не конечные переменные внутри локального класса. Но теперь они позволяют конечный, а также эффективный окончательный (значения которого не были изменены), могут передаваться локальными классами. То, что я знаю (исправьте меня, если я ошибаюсь), они не поддерживали отправку не окончательных значений, потому что значения могут быть изменены. Итак, как они сейчас поддерживают его и почему он ранее не поддерживался.

Ответы

Ответ 1

Ситуация вообще не изменилась. Компилятор только немного умнее и не заставляет вас использовать последнее ключевое слово.

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

Итак, вместо того, чтобы заставить вас сделать переменную final, она автоматически обнаруживает ее. Но вы не можете использовать неэффективные финальные переменные внутри внутреннего класса или лямбда.