Будет ли extension функция написанная внутри класса иметь доступ к полям этого класса в Kotlin

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

Ответ

Нет, extension-функции, объявленные внутри класса, не имеют доступа к его приватным полям. Они ведут себя как обычные extension-функции, просто ограничены областью видимости класса.

class MyClass(private val secret: String) {
    fun String.printSecret() {
        println(secret) // Ошибка: Cannot access 'secret'
    }
}

Extension-функции — это статические функции, которые принимают экземпляр класса (receiver) как первый параметр. Они не являются членами класса и не наследуют его область видимости.