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