Единственный объект в Kotlin
Объявление object Name { ... } в Kotlin
сразу создаёт единственный объект с
этим именем. Язык не предлагает конструктор для
второго экземпляра: снаружи доступно только
обращение по имени Name.
object AppId {
val name = "demo"
}
fun main() {
val a = AppId
val b = AppId
println(a === b)
println(a.name)
}
Оператор === сравнивает ссылки. Для двух
обращений к одному object результат
true: это один и тот же объект в памяти.
Такой объект часто называют singleton -
«одиночка». Им пользуются для общих настроек,
счётчиков, кэша в памяти, когда несколько копий
сломали бы смысл задачи. Ключевое слово object задаёт
этот смысл одной декларацией:
object VisitCounter {
var total: Int = 0
fun hit() {
total += 1
}
}
fun main() {
VisitCounter.hit()
VisitCounter.hit()
println(VisitCounter.total)
}
Если нужны много независимых экземпляров одного
типа, подходит обычный class с вызовом
конструктора, как в разделе про основы. Ключевое слово object
выбирают, когда общий доступ к одному состоянию
или одному набору функций - часть дизайна, а не
случайность.
Сделайте object Session со свойством
token: String со значением "abc".
Сохраните ссылки в first и second,
обе равные Session. Выведите результат
first === second.
Сделайте object ClickCounter с
var count = 0 и методом click().
Вызовите click() три раза из разных
функций файла и выведите count.