Выбор ответа Senior Лямбды и Stream API обновлено

this в лямбде и анонимном классе

Вопрос

Чем this внутри лямбды отличается от this внутри анонимного класса?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В лямбде this это внешний объект, а в анонимном классе сам экземпляр. Лямбда не создаёт новую область видимости для this: внутри неё this и toString() относятся к окружающему объекту.

Варианты ответа

  1. Ничем: в обоих случаях это объект реализуемого функционального интерфейса
  2. В лямбде this недоступен вообще, и такой код не скомпилируется
  3. В лямбде this это внешний объект, а в анонимном классе сам экземплярправильный ответ
  4. В анонимном классе this указывает на внешний класс, а в лямбде на неё саму

Разбор

Лямбда не создаёт новую область видимости для this: внутри неё this и toString() относятся к окружающему объекту. Анонимный класс это отдельный класс, его this указывает на сам анонимный экземпляр, а к внешнему обращаются через Outer.this. Ещё отличие: лямбда компилируется через invokedynamic и не порождает отдельный .class файл на каждое место.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.