Объявление 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 — локальная установка не требуется.
Все уроки этого курса
- Объявление object: синглтоны Kotlin
- companion object: статические элементы в Kotlin
- Анонимные объекты и объектные выражения
- Фабричные методы с companion object