Как extension функция под капотом понимает какой класс она расширяет в Kotlin

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

Ответ

Extension-функции в Kotlin - это просто статические функции, которые принимают экземпляр расширяемого класса в качестве первого параметра. Компилятор преобразует их в обычные функции Java.

// Исходный код
fun String.addExclamation() = "$this!"

// Под капотом (примерный Java-эквивалент)
public static String addExclamation(String receiver) {
    return receiver + "!";
}

Ключевые моменты:

  1. Тип перед точкой в объявлении (String.) становится первым параметром
  2. Внутри функции this ссылается на этот параметр
  3. Вызов "text".addExclamation() преобразуется в StringExtensionsKt.addExclamation("text")