Назад к вопросам
Middle
114
questionbank

Что такое 'companion object' в Kotlin и в каких случаях его следует использовать?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Используется для:

  1. Фабричных методов: Создание экземпляров класса с более сложной логикой, чем у стандартного конструктора.
    class User private constructor(val name: String) { // Приватный конструктор
    
        // Фабричный метод
        companion object {
            fun create(name: String): User {
                // Дополнительная логика создания
                return User("User: $name")
            }
        }
    }
    
  2. Констант уровня класса: Хранение общих констант, связанных с классом.
    class MyClass {
        companion object {
            const val DEFAULT_VALUE = 10
        }
    }
    
  3. Утилитарных функций, привязанных к классу: Функции, которые логически связаны с классом, но не требуют экземпляра.
    class StringUtils {
        companion object {
            fun isEmptyOrNull(str: String?): Boolean {
                return str.isNullOrEmpty()
            }
        }
    }
    
  4. Реализации интерфейсов: companion object может реализовывать интерфейсы, что полезно для предоставления некоторой функциональности без создания экземпляра класса.
    interface Logger {
        fun log(message: String)
    }
    
    class DatabaseLogger {
        companion object : Logger {
            override fun log(message: String) {
                println("Database log: $message")
            }
        }
    }