Sobes.tech
Middle

Mi a különbség egy osztályon belüli objektum és egy társ objektum között Kotlinban?

sobes.tech MI

Válasz az MI-től

Egy inner object egy osztályon belül kötött a külső osztály példányához, és csak az életciklusa során létezik. A companion object singletonként létezik, nem kötött egy példányhoz, és közvetlenül elérhető a osztály nevével.

Fő különbségek:

  • Kapcsolat a példánnyal: az inner object kötött egy külső példányhoz, a companion object nem.
  • Hozzáférés: az inner object-hez csak egy példányon keresztül lehet hozzáférni, a companion object-hez közvetlenül az osztály nevével.
  • Állapot: az inner object-nek lehet példány-specifikus állapota, a companion object az egész osztályra vonatkozik.
  • Használat: az inner object gyakran használják a State mintázat megvalósítására vagy kapcsolódó objektumok csoportosítására egy példányon belül. A companion object gyárfüggvényekhez, állandókhoz vagy statikus osztálytagokhoz használatos.

Példa:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // az inner object hozzáfér a külső osztály tagjaihoz
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // gyárfüggvény
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // hozzáférés a companion object-hez
    // val inner = Outer.InnerObject // Hiba: nem lehet hozzáférni az InnerObject-hez külső példány nélkül
    val inner = outer.InnerObject // hozzáférés az inner object-hez a példányon keresztül

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // szintaktikus cukor a CompanionObject tagjaihoz való hozzáféréshez
}