Освой Kotlin играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Ключевое слово object

Шаблон "Одиночка"
data object

Ключевое слово object одновременно объявляет класс и создаёт его экземпляр.

С его помощью можно реализовать шаблон "Одиночка". Например, класс для фонда заработной платы (у предприятий только один фонд), класс для печати (обработка заданий для принтера), Wi-Fi (общие настройки связи) и т.д.

Также можно реализовать объект-компаньон, содержащий лишь фабричные методы, а также методы, связанные с классом, но не требующие обращения к его экземпляру. К членам такого объекта можно обращаться просто по имени класса.

Ещё можно использовать для записи объекта-выражения в качестве замены анонимного внутреннего класса.

Шаблон "Одиночка"

Иногда требуется класс, который должен существовать в одном экземпляре. В Kotlin имеется специальный синтаксис объявления объекта для подобных случаев.


object One {
    val cats = arrayListOf<Cat>()
    
    fun callCat() {
        for (cat in cats) {
            ...
        }
    }
}

Вы можете задавать свойства, методы, блоки инициализации, но не можете создавать конструкторы (как основные, так и вторичные).

Обращаться к методам и свойствам класса можно через имя объекта.


One.cats.add(Cat(...))
One.callCat()

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

Объекты-выражения

Ключевое слово object можно использовать не только для объявления одиночек, но и для создания анонимных объектов, которые являются заменой анонимных внутренних классов в Java.

data object

В Kotlin 1.9 появились объекты данных. data object — это обычный object, но с реализацией по умолчанию функции toString(), которая выводит его имя без ручного её переопределения и с соответствием поведения определению data class. Соответствие поведения классам данных особенно актуально для иерархий запечатанных классов.


sealed interface ProfileScreenState {
    data class Success(val username: String) : ProfileScreenState
    data object Error : ProfileScreenState
    data object Loading : ProfileScreenState
}

Объекты данных — это новый функционал Kotlin, который улучшает строковое представление object. Он особенно актуален, когда имеются иерархии запечатанных классов с другими классами данных и их нужно занести в журнал или распечатать для отладки или аналитики.

Реклама