Middle
Aký je rozdiel medzi objektom vnútri triedy a companion objektom v Kotlin?
sobes.tech AI
Odpoveď od AI
Vnútorný objekt (inner object) v rámci triedy je viazaný na inštanciu vonkajšej triedy a existuje iba počas jej životného cyklu. Objekt sprievodca (companion object) existuje ako singleton, nie je viazaný na inštanciu triedy a môže byť priamo prístupný cez názov triedy.
Hlavné rozdiely:
- Väzba na inštanciu:
inner objectje viazaný na inštanciu vonkajšej triedy,companion objectnie. - Prístup: k
inner objectsa dá pristupovať iba cez inštanciu vonkajšej triedy, kcompanion objectpriamo cez názov triedy. - Stav:
inner objectmôže mať stav špecifický pre inštanciu,companion objectje spoločný pre celú triedu. - Použitie:
inner objectsa často používa na implementáciu vzoru State alebo na skupinovanie súvisiacich objektov vnútri inštancie.companion objectsa používa na továrenské metódy, konštanty alebo statické členy triedy.
Príklad:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object má prístup k členom vonkajšej triedy
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // továrenská metóda
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // prístup k sprievodnému objektu
// val inner = Outer.InnerObject // Chyba: nie je možné pristúpiť k InnerObject bez inštancie Outer
val inner = outer.InnerObject // prístup k vnútornému objektu cez inštanciu
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // syntaktický cukor na prístup k členom CompanionObject
}