Sobes.tech
Назад к вопросам
Junior — Middle
75

Может ли функция расширения, определенная внутри класса в Kotlin, обращаться к его полям и методам?

Компании, где спрашивали
Dion

Ответ от нейросети

sobes.tech AI

Функция расширения в Kotlin не является настоящим методом класса, а компилируется в статическую функцию, принимающую объект в качестве параметра. Поэтому она не имеет прямого доступа к приватным полям и методам класса.

Однако, если функция расширения определена внутри класса, она может получить доступ к членам этого класса, но не к приватным членам объекта, к которому применяется расширение.

Пример:

class MyClass {
    private val secret = "secret"

    fun String.extensionFunction() {
        println(this) // доступ к String
        // println(secret) // Ошибка: нет доступа к private полю объекта String
    }

    fun test() {
        "Hello".extensionFunction() // вызов функции расширения
    }
}

Таким образом, функция расширения внутри класса может обращаться к членам класса, в котором она объявлена, но не к приватным полям и методам объекта, к которому применяется расширение.