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

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

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

Анонимный внутренний класс можно использовать для расширения любого имеющегося класса или реализовать существующий внешний интерфейс, в котором больше одной абстрактной функции. Также лямбда-выражение способно реализовать интерфейс, имеющий не более одной абстрактной функции.

Анонимный внутренний класс использует свой скоуп, а лямбда общий. Поэтому, в лямбда невозможно объявить переменную с существующим именем, в этом случае компилятор выдаст ошибку «varable is already defned». В анонимном классе такая переменная будет использоваться как локальная, и действовать только внутри класса (внешняя будет скрыта). Для лямбды не создаётся отдельный файл *.class, поэтому, вместо загрузки и верификации применяется invokedynamic, то есть класс создаётся на лету, используя LambdaMetafactory. В результате лямбда выигрывают в скорости выполнения.

Проверьте себя после изучения темы

Бесплатный бот с тестами и практическими заданиями по Kotlin.

  • 22 бесплатных урока
  • Тесты к каждому уроку (всего 220 вопросов)
  • Задачи в рамках практики KotlinSprint (120 задач) и курсовой проект «Телеграм бот для изучения иностранных слов»
Начать обучение

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Узнать подробнее