Реализация дружественных классов на 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
}