Давайте посмотрим на более простой пример:
class A {
inner class B {
fun foo() {
// ...
}
}
}
Чтобы вызвать функцию во внутреннем классе, вы должны получить к ней доступ, используя экземпляр внешнего класса, например:
A().B().foo()
Что делает ваш пример более сложным, так это то, что Int.foo()
является функцией расширения, поэтому для доступа к ней вы должны вызвать foo()
для Int
в той же области, что и функция расширения:
class A { // outer class A
inner class B { // inner class B
fun Int.foo() { // entension function foo
print("Foo called on integer $this")
}
fun caller(i: Int) { // calls extension function
i.foo()
}
}
}
fun main() {
A().B().caller(10) // calls extension function in inner class B
}
Здесь мы добавили функцию caller
, которая находится в той же области видимости, что и функция расширения.Код выводит следующее:
Foo called on integer 10