В чем разница между object и companion object

«В чем разница между object и companion object» — вопрос из категории Kotlin, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 может иметь имя и реализовывать интерфейсы