Sobes.tech
Middle

Mis vahe on objekti sees klassi ja kaaslase objekti Kotlinis?

sobes.tech AI

Vastus AI-lt

Objekt klases sees (inner object) on seotud välise klassi eksemplariga ja eksisteerib ainult selle elutsükli jooksul. Objekti kaaslane (companion object) eksisteerib kui singleton, mis ei ole seotud klassi eksemplariga ja sellele saab otse ligi klassi nime kaudu.

Peamised erinevused:

  • Seos eksemplariga: inner object on seotud välise klassi eksemplariga, companion object mitte.
  • Juurdepääs: inner object on kättesaadav ainult välise klassi eksemplari kaudu, companion object - otse klassi nime kaudu.
  • Seisund: inner object võib omada seisundit, mis on spetsiifiline eksemplarile, companion object on üldine kogu klassi jaoks.
  • Kasutus: inner object kasutatakse sageli State mustri rakendamiseks või seotud objektide rühmitamiseks klassi sees. companion object kasutatakse tehase meetodite, konstantide või staatiliste liikmete jaoks.

Näide:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner objectil on juurdepääs välise klassi liikmetele
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // tehase meetod
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // juurdepääs companion objectile
    // val inner = Outer.InnerObject // viga: InnerObject-i ei saa ilma välise klassi eksemplarita
    val inner = outer.InnerObject // juurdepääs inner objectile eksemplari kaudu

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // süntaksisuhkur juurdepääsuks CompanionObject liikmetele
}