TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #137 677
Kotlin lambdas, часть I.

До версии Kotlin 2.0 лямбды компилировались в анонимные классы, реализующие один из интерфейсов FunctionX:
val twice: (Int) -> Int = { value -> 
value * 2
}

// лямбда является обычным классом который наследует интерфейс FunctionX
final class TwiceLambda implements Function1<Integer, Integer> {

// лямбды которые не захватывают переменные простые синглетоны, это нужно для переиспользования
public static final TwiceLambda INSTANCE = new TwiceLambda();

private TwiceLambda() {}

@Override
public Integer invoke(Integer value) {
return value * 2;
}
}


Базовых интерфейсов для Kotlin лямбд всего 24, начиная с Function0, лямбда которая ничего не принимает, только возвращает результат, заканчивая Function22, лямбда которая принимает 22 параметра, также есть FunctionN для лямбд с переменным количеством аргументов.

Если лямбда захватывает переменную, то ее значение просто передается в конструктор:
val koeff = 2
val twice: (Int) -> Int = { value ->
value * koeff
}

final class TwiceLambda implements Function1<Integer, Integer> {

private final int koeff;

// в таком случае сложнее переиспользовать обьект лямбды
public TwiceLambda(int koeff) {
this.koeff = koeff;
}

...
}


Захват с var практически ничем не отличается, только значение кладется в IntRef, ObjectRef и тд, тут можно почитать.

Во второй части поговорим что стало с лямбдами в Kotlin 2.0+
  • 👍 18
  • ❤ 7
  • 🔥 1
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  3. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  4. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  5. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
  6. Jan 18, 2026Пару фактов о Go, часть I. 1) Нет объектов и классов, только структуры и функции. Если сра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →