Что представляет из себя лямбда функция под капотом

«Что представляет из себя лямбда функция под капотом» — вопрос из категории Kotlin, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Лямбда в Kotlin/Java — это синтаксический сахар для функциональных интерфейсов (SAM). Под капотом:

  1. Для Java: создается анонимный класс, реализующий интерфейс с одним методом (например, Runnable, OnClickListener).
    button.setOnClickListener(v -> { /* code */ });
    // Превращается в:
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { /* code */ }
    });
  1. Для Kotlin: если лямбда не захватывает переменные, генерируется синглтон-объект для оптимизации. При захвате — создается новый объект при каждом вызове.

Особенности:

  • Нет оверхеда в рантайме (если не захватывает контекст)
  • В Kotlin может быть inline (оптимизация байт-кода)
  • Не является точным аналогом Java 8 лямбд (там используется invokedynamic)