Middle
Koja je razlika između objekta unutar klase i companion objekta u Kotlinu?
sobes.tech АИ
Одговор од АИ
Unutrašnji objekat (inner object) unutar klase je povezan sa instancom spoljašnje klase i postoji samo tokom njenog životnog ciklusa. Objekt saputnik (companion object) postoji kao singleton, nije povezan sa instancom klase i može biti direktno dostupan putem imena klase.
Glavne razlike:
- Veza sa instancom:
inner objectje povezan sa instancom spoljašnje klase,companion objectnije. - Pristup: do
inner objectmože se doći samo putem instance spoljašnje klase, docompanion objectdirektno putem imena klase. - Stanje:
inner objectmože imati stanje specifično za instancu,companion objectje zajednički za celu klasu. - Upotreba:
inner objectse često koristi za implementaciju obrasca State ili za grupisanje povezanih objekata unutar instance.companion objectse koristi za fabričke metode, konstante ili statičke članove klase.
Primer:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object ima pristup članovima spoljašnje klase
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // fabrička metoda
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // pristup objektu saputniku
// val inner = Outer.InnerObject // Greška: ne može se pristupiti InnerObject bez instance Outer
val inner = outer.InnerObject // pristup unutrašnjem objektu putem instance
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // sintaksni šećer za pristup članovima CompanionObject
}