Sobes.tech
Middle

Aký je rozdiel medzi objektom vnútri triedy a companion objektom v Kotlin?

sobes.tech AI

Odpoveď od AI

Vnútorný objekt (inner object) v rámci triedy je viazaný na inštanciu vonkajšej triedy a existuje iba počas jej životného cyklu. Objekt sprievodca (companion object) existuje ako singleton, nie je viazaný na inštanciu triedy a môže byť priamo prístupný cez názov triedy.

Hlavné rozdiely:

  • Väzba na inštanciu: inner object je viazaný na inštanciu vonkajšej triedy, companion object nie.
  • Prístup: k inner object sa dá pristupovať iba cez inštanciu vonkajšej triedy, k companion object priamo cez názov triedy.
  • Stav: inner object môže mať stav špecifický pre inštanciu, companion object je spoločný pre celú triedu.
  • Použitie: inner object sa často používa na implementáciu vzoru State alebo na skupinovanie súvisiacich objektov vnútri inštancie. companion object sa používa na továrenské metódy, konštanty alebo statické členy triedy.

Príklad:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object má prístup k členom vonkajšej triedy
        }
    }

    companion object CompanionObject {
        const val CONSTANT = "Some constant"

        fun createOuter(): Outer {
            return Outer() // továrenská metóda
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // prístup k sprievodnému objektu
    // val inner = Outer.InnerObject // Chyba: nie je možné pristúpiť k InnerObject bez inštancie Outer
    val inner = outer.InnerObject // prístup k vnútornému objektu cez inštanciu

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // syntaktický cukor na prístup k členom CompanionObject
}