Sobes.tech
Back to questions
Junior — Middle
78

Как реализована и работает расширяющая функция в Kotlin внутри на уровне низкоуровневых деталей?

Companies where asked
Viasat tech

Answer from AI

sobes.tech AI

Расширяющие функции в Kotlin на самом деле не добавляют методы в класс на уровне байткода. Они реализованы как статические методы, принимающие объект-приёмник в качестве первого параметра.

Например, функция:

fun String.lastChar(): Char = this.get(this.length - 1)

Компилируется примерно в Java-метод:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

То есть расширяющие функции — это синтаксический сахар, позволяющий вызывать такие статические методы как будто они методы объекта. Это значит, что расширения не могут получить доступ к приватным членам класса, так как они не являются его частью.

Вызов "abc".lastChar() компилируется в вызов Extensions.lastChar("abc").

Таким образом, расширения реализованы на уровне JVM как обычные статические методы с первым параметром — объектом, к которому применяется расширение.