0Pricing
Kotlin Academy · Урок

Объявление object: синглтоны Kotlin

Создавайте синглтоны с помощью object и разбирайтесь в их жизненном цикле.

«Объявление object: синглтоны Kotlin» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

object как Singleton

Объявление object создаёт единственный экземпляр — потокобезопасный Singleton с отложенной инициализацией — всего одной строкой кода.

Объявление Singleton

Используйте object Name { ... }, чтобы объявить Singleton с состоянием и методами.

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

Состояние Singleton

Singleton может хранить изменяемое состояние, доступное откуда угодно и общее для всего приложения.

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

Отложенная инициализация

Единственный экземпляр создаётся при первом обращении к нему, но не раньше. JVM гарантирует потокобезопасность этой операции.

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

Реализация интерфейсов

Singleton может реализовывать интерфейсы, что полезно для обратных вызовов и стратегий.

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

Наследование класса

Объекты также могут наследоваться от открытых классов.

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

Практика: конфигурация

Singleton идеально подходит для конфигурации всего приложения, которая не изменяется после запуска.

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

Практика: вспомогательные функции

Объединяйте связанные функции без состояния в object как статические методы с пространством имён.

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

Равенство и идентичность

Существует только один экземпляр, поэтому === всегда возвращает true для одной и той же ссылки на объект.

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

object и class

Обычный class нужно инстанцировать. object уже является экземпляром, поэтому вызов конструктора не требуется.

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

Потокобезопасность

Создание экземпляра Singleton потокобезопасно благодаря гарантиям загрузки классов JVM. Ответственность за любое добавленное внутри изменяемое состояние лежит на Вас.

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

Быстрая проверка

Сколько экземпляров существует у объявления Kotlin object?

Повторение

object Name { ... } объявляет потокобезопасный Singleton с отложенной инициализацией, состоянием, методами, интерфейсами и наследованием. Используйте объекты для конфигурации, групп вспомогательных функций и сервисов без состояния.

Часто задаваемые вопросы

Урок «Объявление object: синглтоны Kotlin» бесплатный?

Да — полный текст урока «Объявление object: синглтоны Kotlin» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Объявление object: синглтоны Kotlin»?

Создавайте синглтоны с помощью object и разбирайтесь в их жизненном цикле. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Объявление object: синглтоны Kotlin»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объявление object: синглтоны Kotlin
  2. companion object: статические элементы в Kotlin
  3. Анонимные объекты и объектные выражения
  4. Фабричные методы с companion object
← Назад к Kotlin Academy