Ответ
object в Kotlin — это синглтон, создаваемый при первом обращении. Используется для хранения глобального состояния или реализации паттерна Singleton.
companion object — это синглтон, привязанный к классу. Позволяет создавать статические методы и свойства, но с доступом к приватным членам класса. Аналог static в Java, но с более гибкой семантикой.
Пример:
class MyClass {
companion object {
const val CONSTANT = "value"
fun factory() = MyClass()
}
}
object Singleton {
fun doWork() { ... }
}
Отличия:
object— самостоятельный синглтонcompanion object— синглтон внутри класса, заменяет статикуcompanion objectможет иметь имя и реализовывать интерфейсы