Ответ
В Kotlin ключевое слово object используется для объявления синглтона — класса, который существует только в одном экземпляре. Это замена статическим членам класса из Java, реализованная на уровне языка.
Основные случаи использования:
-
Объекты-одиночки (Singleton):
object AppSettings { val version = "1.0" fun getBaseUrl() = "https://api.example.com" } // Использование (обращение напрямую к имени объекта): println(AppSettings.version) -
Спутниковые объекты (Companion Object): Аналог статических методов/полей внутри класса.
class MyClass { companion object { const val TAG = "MyClass" fun create() = MyClass() } } // Вызов: MyClass.TAG, MyClass.create() -
Объекты как анонимные классы (замена 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).