Sobes.tech
Middle

Kāda ir atšķirība starp objektu klasē un companion objektu Kotlin?

sobes.tech AI

Atbilde no AI

Objekts klasē iekšpusē (inner object) ir saistīts ar ārējās klases eksemplāru un pastāv tikai tā dzīves cikla laikā. Objekta partneris (companion object) pastāv kā singltons, kas nav saistīts ar klases eksemplāru, un to var tieši piekļūt, izmantojot klases nosaukumu.

Galvenās atšķirības:

  • Saistība ar eksemplāru: inner object ir saistīts ar ārējās klases eksemplāru, bet companion object nav.
  • Piekļuve: pie inner object var piekļūt tikai caur ārējās klases eksemplāru, bet pie companion object - tieši caur klases nosaukumu.
  • Stāvoklis: inner object var būt ar stāvokli, kas raksturīgs eksemplāram, bet companion object ir kopīgs visai klasei.
  • Izmantošana: inner object bieži tiek izmantots State modeļa īstenošanai vai saistītu objektu grupēšanai klases iekšpusē. companion object tiek izmantots fabrika metožu, konstantes vai statisko klases locekļu definēšanai.

Piemērs:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object ir piekļuve ārējās klases locekļiem
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // fabrika metode
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // piekļuve pie companion object
    // val inner = Outer.InnerObject // kļūda: nevar piekļūt InnerObject bez ārējās klases eksemplāra
    val inner = outer.InnerObject // piekļuve inner object caur eksemplāru

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // sintakses cukurs piekļuvei pie CompanionObject locekļiem
}