Ответ
Объект в Kotlin инициализируется при первом доступе к нему (ленивая инициализация). Это потокобезопасно по умолчанию. Пример:
object Singleton {
init {
println("Initialized")
}
fun doWork() = println("Working")
}
// При первом вызове:
Singleton.doWork() // Выведет "Initialized", затем "Working"
Если нужна ранняя инициализация (например, в Application), можно использовать @JvmStatic с lateinit. Объекты существуют в единственном экземпляре (синглтон).
Ответ 18+ 🔞
Слушай, вот объясняю, как эта штука работает, чтобы ты не охуел потом от неожиданностей. В Котлине есть такая прикольная фишка — object. Это типа синглтон, который инициализируется, когда ты к нему первый раз прикоснулся, лениво так. И самое главное — по умолчанию он потокобезопасный, ёпта, тебе не нужно самому городить synchronized и прочую дичь.
Вот смотри, простой пример:
object Singleton {
init {
println("Initialized")
}
fun doWork() = println("Working")
}
// При первом вызове:
Singleton.doWork() // Выведет "Initialized", затем "Working"
Видишь? Пока ты не вызвал doWork(), этот init блок просто спит, блядь, и объект не создаётся. А как только позвал — раз, инициализация, и потом сразу работа. Удобно, если объект тяжёлый и не факт, что понадобится.
Но бывает, что тебе надо, чтобы этот ваш синглтон встал раньше, например, при старте приложения. Ну, чтобы не ждать первого вызова, а то вдруг там инициализация долгая, а пользователь уже тыкает кнопку — будет лаг, и он пошлёт тебя нахуй. Тогда можно использовать @JvmStatic с lateinit, чтобы проинициализировать его вручную, в том же Application.onCreate(). Это как завести машину с утра, чтобы она прогрелась, а не пытаться стартануть, когда уже в пробке стоишь.
И да, запомни раз и навсегда: этот object существует в единственном экземпляре, это и есть синглтон, ёбаный в рот. Где бы ты к нему ни обратился — везде один и тот же объект. Не пытайся создать ещё один — нихуя не выйдет, это не класс. В общем, штука мощная, но надо понимать, когда она просыпается, а то подозрение ебать чувствую, что многие тут на граблях танцуют.