2014-10-23 2 views
3

Имеет ли экземпляр анонимного внутреннего класса все доступные конечные переменные или хранит только переменные, которые используются внутри указанного внутреннего класса? (т. е. выполняет ли какой-то анализ? Насколько я знаю, ссылка на родительский экземпляр хранится независимо от того, что.)Java anonymous внутренний класс

+0

Я считаю, что эта тема может быть полезна: http: //stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class –

+0

Повторно открывается, потому что связанная нить не ответьте на вопрос, сколько из этих конечных переменных скопировано. – Thilo

ответ

1

Ссылка на класс-класс хранится независимо от того, что.

Конечные переменные хранятся в виде копии, но только если вы действительно ссылаетесь на них где-то в своем внутреннем классе. Это не требует особого «анализа», но может быть сделано на обычном этапе компиляции (компилятор должен все равно разрешить переменную, поэтому он также может вывести код для настройки копии).

+0

Хорошо, я просто заявляю об этом без каких-либо ссылок. Возможно, кто-то может заполнить дамп байт-кода для минимального скомпилированного класса для демонстрации. – Thilo

+0

Вот один такой дамп, но он не отвечает на вопрос о переменных, которые не нужны: http://stackoverflow.com/a/2804940/14955 – Thilo

+3

Очень вероятно, что компилятор, который сохранил все локальные вары, все равно быть совместимым со спецификацией. Другими словами, обсуждаемое поведение в принципе зависит от реализации. На практике вы на 100% правы, так как никакой здравомыслящий компилятор фактически не собирается хранить больше, чем необходимо. –

Смежные вопросы