Что такое объект (object) в Kotlin и для чего он используется?

«Что такое объект (object) в Kotlin и для чего он используется?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin ключевое слово object используется для объявления синглтона — класса, который существует только в одном экземпляре. Это замена статическим членам класса из Java, реализованная на уровне языка.

Основные случаи использования:

  1. Объекты-одиночки (Singleton):

    object AppSettings {
        val version = "1.0"
        fun getBaseUrl() = "https://api.example.com"
    }
    // Использование (обращение напрямую к имени объекта):
    println(AppSettings.version)
  2. Спутниковые объекты (Companion Object): Аналог статических методов/полей внутри класса.

    class MyClass {
        companion object {
            const val TAG = "MyClass"
            fun create() = MyClass()
        }
    }
    // Вызов: MyClass.TAG, MyClass.create()
  3. Объекты как анонимные классы (замена Java-анонимных внутренних классов):

    button.setOnClickListener(object : View.OnClickListener {
        override fun onClick(v: View?) { /* ... */ }
    })

Ключевые особенности:

  • Ленивая инициализация: Экземпляр создаётся при первом обращении.
  • Может наследовать классы и реализовывать интерфейсы: object : Runnable { override fun run() {} }.
  • Не имеет конструкторов.
  • Потокобезопасность: Инициализация по умолчанию потокобезопасна.

Сравнение с Swift: В Swift для синглтона используется статическое константное свойство (static let shared = MyClass()), но ленивость и потокобезопасность нужно обеспечивать вручную (или использовать dispatch_once в Objective-C).