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 objectir saistīts ar ārējās klases eksemplāru, betcompanion objectnav. - Piekļuve: pie
inner objectvar piekļūt tikai caur ārējās klases eksemplāru, bet piecompanion object- tieši caur klases nosaukumu. - Stāvoklis:
inner objectvar būt ar stāvokli, kas raksturīgs eksemplāram, betcompanion objectir kopīgs visai klasei. - Izmantošana:
inner objectbieži tiek izmantots State modeļa īstenošanai vai saistītu objektu grupēšanai klases iekšpusē.companion objecttiek 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
}