Назад к вопросам
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() // вызов функции расширения
}
}
Таким образом, функция расширения внутри класса может обращаться к членам класса, в котором она объявлена, но не к приватным полям и методам объекта, к которому применяется расширение.