Ответ
companion object — это объект, объявленный внутри класса, который позволяет обращаться к его членам (методам, свойствам) без создания экземпляра класса, как к статическим в Java.
Особенности:
- Доступ через имя класса (
ClassName.member). - Может реализовывать интерфейсы.
- Может иметь имя (по умолчанию —
Companion).
Пример:
class MyClass {
companion object {
const val TAG = "MyClass"
fun create(): MyClass = MyClass()
}
}
// Использование:
val instance = MyClass.create() // Без создания MyClass
println(MyClass.TAG) // "MyClass"
Отличие от Java static:
companion object— это объект (синглтон), поэтому может передаваться как экземпляр (например, в функции, ожидающие интерфейс).