Когда инициализируется companion object

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

Ответ

Companion object инициализируется при первом обращении к классу, в котором он объявлен, либо при первом обращении к самому companion object. Это происходит лениво (lazy initialization), аналогично статическим блокам в Java.

Пример:

class MyClass {
    companion object {
        init {
            println("Companion initialized")
        }

        const val CONST_VALUE = 42
    }
}

// Инициализация произойдет здесь:
val value = MyClass.CONST_VALUE

Важные особенности:

  1. Инициализируется только один раз (синглтон)
  2. Потокобезопасен (инициализация синхронизирована)
  3. Доступен без создания экземпляра класса