Sobes.tech
Junior

Opowiedz o obiekcie companion w Kotlin.

sobes.tech AI

Odpowiedź od AI

companion object w Kotlinie jest używany do definiowania członków klasy (właściwości i funkcji), które są wspólne dla wszystkich instancji tej klasy, a także do uzyskiwania do nich dostępu bez tworzenia instancji klasy. Jest to zasadniczo odpowiednik statycznych członków w Javie, ale zaimplementowany jako obiekt wewnątrz klasy.

Główne cechy:

  • Pojedyncza instancja: Wewnątrz klasy może istnieć tylko jeden companion object.
  • Inicjalizacja: Inicjalizuje się przy pierwszym załadowaniu klasy.
  • Dostęp do członków prywatnych: Ma dostęp do prywatnych członków klasy zewnętrznej.
  • Nazywanie: Domyślnie ma nazwę Companion, ale można go wyraźnie nazwać.
  • Implementacja interfejsów: Może implementować interfejsy.

Przykład użycia:

class MyClass {
    companion object {
        const val TAG = "MyClass" // Stała

        fun createInstance(): MyClass { // Metoda fabryczna
            return MyClass()
        }
    }

    fun doSomething() {
        println("Robię coś...")
    }
}

fun main() {
    println(MyClass.TAG) // Dostęp do członka companion object
    val instance = MyClass.createInstance() // Użycie metody fabrycznej
    instance.doSomething()
}

Zalety:

  • Bardziej semantyczne: Pozwala grupować powiązane "statyczne" członków w jednym miejscu.
  • Elastyczność: Może implementować interfejsy, co jest przydatne w wzorcach projektowych.
  • Dostęp do członków prywatnych: Ułatwia implementację metod fabrycznych i singletonów wewnątrz klasy.