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 objecton seotud välise klassi eksemplariga,companion objectmitte. - Juurdepääs:
inner objecton kättesaadav ainult välise klassi eksemplari kaudu,companion object- otse klassi nime kaudu. - Seisund:
inner objectvõib omada seisundit, mis on spetsiifiline eksemplarile,companion objecton üldine kogu klassi jaoks. - Kasutus:
inner objectkasutatakse sageli State mustri rakendamiseks või seotud objektide rühmitamiseks klassi sees.companion objectkasutatakse 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
}