Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpOcCp 87 of 123 menu
◀ ▶

Companion object в Kotlin

Блок companion object пишут внутри тела class. У класса может быть только один такой блок. Его члены не принадлежат отдельному экземпляру: к ним обращаются по имени класса, без переменной с объектом User:

class User(val name: String) { companion object { var defaultRole = "guest" fun describeRole(): String = "role=$defaultRole" } } fun main() { println(User.describeRole()) User.defaultRole = "admin" println(User.describeRole()) }

Companion сам по себе - полноценный object с именем по умолчанию Companion. Его можно назвать явно, если к блоку нужно обращаться по этому имени:

class ApiClient { companion object Factory { fun versionTag(): String = "v1" } } fun main() { println(ApiClient.versionTag()) println(ApiClient.Factory.versionTag()) }

Именованный companion не создаёт второй блок - это то же самое объявление с другим именем типа объекта. Второй companion object в одном классе компилятор не разрешит.

Companion удобен, когда операция относится к типу в целом: версия, роль по умолчанию, общий счётчик созданных экземпляров. Создание объектов через companion разберём отдельно; для глобального сервиса без класса данных по-прежнему подходит верхнеуровневый object.

Сделайте class Point(val x: Int, val y: Int) с companion object, в котором fun zero(): Point возвращает точку (0, 0). Выведите Point.zero().

Добавьте в class Book companion object с var catalogSize = 0 и методом register(), увеличивающим счётчик. Вызовите register() дважды и выведите Book.catalogSize.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить