Выбор ответа Senior Лямбды и Stream API обновлено
this в лямбде и анонимном классе
Вопрос
Чем this внутри лямбды отличается от this внутри анонимного класса?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В лямбде this это внешний объект, а в анонимном классе сам экземпляр. Лямбда не создаёт новую область видимости для this: внутри неё this и toString() относятся к окружающему объекту.
Варианты ответа
- Ничем: в обоих случаях это объект реализуемого функционального интерфейса
- В лямбде
thisнедоступен вообще, и такой код не скомпилируется - В лямбде
thisэто внешний объект, а в анонимном классе сам экземплярправильный ответ - В анонимном классе
thisуказывает на внешний класс, а в лямбде на неё саму
Разбор
Лямбда не создаёт новую область видимости для this: внутри неё this и toString() относятся к окружающему объекту. Анонимный класс это отдельный класс, его this указывает на сам анонимный экземпляр, а к внешнему обращаются через Outer.this. Ещё отличие: лямбда компилируется через invokedynamic и не порождает отдельный .class файл на каждое место.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.