Middle
Care este diferența dintre un obiect din interiorul unei clase și un companion object în Kotlin?
sobes.tech AI
Răspuns de la AI
Un obiect intern (inner object) dintr-o clasă este legat de o instanță a clasei externe și există doar în timpul ciclului său de viață. Obiectul companion (companion object) există ca un singleton, nelegat de o instanță a clasei și poate fi accesat direct prin numele clasei.
Diferențele principale:
- Legătura cu instanța:
inner objecteste legat de o instanță a clasei externe,companion objectnu. - Acces: se poate accesa
inner objectdoar printr-o instanță a clasei externe,companion objectdirect prin numele clasei. - Stare:
inner objectpoate avea o stare specifică instanței,companion objecteste comun pentru întreaga clasă. - Utilizare:
inner objecteste adesea folosit pentru implementarea pattern-ului State sau pentru gruparea obiectelor legate în interiorul unei instanțe.companion objecteste folosit pentru metode de fabrică, constante sau membri statici ai clasei.
Exemplu:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object are acces la membrii clasei externe
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // metodă de fabrică
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // acces la obiectul companion
// val inner = Outer.InnerObject // Eroare: nu se poate accesa InnerObject fără o instanță a lui Outer
val inner = outer.InnerObject // acces la obiectul intern prin instanță
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // zahăr sintactic pentru accesarea membrilor din CompanionObject
}