Что будет в байт коде после написания расширения класса

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

Ответ

При компиляции Kotlin-кода с расширением класса (extension function), байт-код будет содержать статический метод в классе-компаньоне (если функция объявлена в файле) или в отдельном классе. Этот метод принимает первым параметром экземпляр класса, который расширяется.

Пример:

fun String.addExclamation() = "$this!"

В байт-коде это превратится примерно в:

public static String addExclamation(String receiver) {
    return receiver + "!";
}

Расширения не модифицируют исходный класс, а являются синтаксическим сахаром. Вызов "Hi".addExclamation() в байт-коде будет заменён на статический вызов StringExtensionsKt.addExclamation("Hi").