Что такое object / companion object

 object - это анонимный класс

val helloWorld = object { 
 val hello = "Hello" 
 val world = "World" 
 // тип анонимных объектов - Any, поэтому `override` необходим в `toString()`
 override fun toString() = "$hello $world" 
}

companion object — это альтернатива статическим методам, либо объектам класса.

Oct. 15, 2023, Источник

`object` и `companion object` используются для реализации различных паттернов и функциональностей, включая паттерн "одиночка" (singleton), объявление статических членов и функций, а также для реализации объектов без необходимости явного создания экземпляра класса. Давайте разберем каждый из этих случаев подробнее.

Object

Используется для создания одиночного экземпляра класса, то есть реализации паттерна "одиночка" (singleton). В отличие от других классов, для которых необходимо создавать экземпляры с помощью оператора `new` (как в Java) или напрямую (в Kotlin оператор `new` не используется), `object` гарантирует, что создается только один экземпляр объекта. К объекту можно обращаться по его имени, без необходимости его явного создания.Пример:

```kotlin
object Singleton {
    val property = "This is a singleton object"
    
    fun show() {
        println(property)
    }
}

// Доступ и использование
fun main() {
    Singleton.show()
}
```

Companion Object

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

Пример:

```kotlin
class MyClass {
    companion object {
        val staticProperty = "This is like a static variable"
        
        fun staticMethod() {
            println("This is like a static method")
        }
    }
}

// Доступ и использование
fun main() {
    println(MyClass.staticProperty)
    MyClass.staticMethod()
}
```

Отличия и использование

  • Object: Используется для создания одного экземпляра объекта. Экземпляр автоматически создается при первом обращении к объекту. Подходит для реализации паттерна "одиночка" и для создания объектов-утилит или объектов, представляющих глобальное состояние.
  • Companion Object: Предназначен для объявления членов и функций класса, которые можно использовать без создания экземпляра этого класса. Используется для объявления членов класса, аналогичных статическим в Java.

Оба этих механизма позволяют организовать доступ к данным и функциям определенным образом, упрощая тем самым структуру кода и его читаемость.

April 12, 2024, easyoffer