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