Реализация дружественных классов на Kotlin
Класс A
объявлен в библиотечном модуле, свойства с модификатором internal
доступны только внутри одного модуля:
class A {
internal val foo: String = "bar"
}
interface AFriend {
val A.foo get() = foo
}
Класс B
объявлен в другом модуле, но получает доступ к свойству foo
через расширение в интерфейсе AFriend
.
class B : AFriend {
fun printFoo() {
println(A().foo)
}
}
fun main() {
B().printFoo() // print bar
}