Middle
Jaký je rozdíl mezi objektem uvnitř třídy a companion objektem v Kotlinu?
sobes.tech AI
Odpověď od AI
Vnitřní objekt (inner object) uvnitř třídy je vázán na instanci vnější třídy a existuje pouze během jejího životního cyklu. Společný objekt (companion object) existuje jako singleton, není vázán na instanci třídy a může být přímo přístupný přes název třídy.
Hlavní rozdíly:
- Vazba na instanci:
inner objectje vázán na instanci vnější třídy,companion objectne. - Přístup: k
inner objectlze přistupovat pouze přes instanci vnější třídy, kcompanion objectpřímo přes název třídy. - Stav:
inner objectmůže mít stav specifický pro instanci,companion objectje společný pro celou třídu. - Použití:
inner objectse často používá k implementaci vzoru State nebo ke skupinování souvisejících objektů uvnitř instance.companion objectse používá pro tovární metody, konstanty nebo statické členy třídy.
Příklad:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object má přístup ke členům vnější třídy
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // tovární metoda
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // přístup ke companion object
// val inner = Outer.InnerObject // Chyba: nelze přistupovat k InnerObject bez instance Outer
val inner = outer.InnerObject // přístup k inner object přes instanci
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // syntaktický cukr pro přístup ke členům CompanionObject
}