Middle
Wat is het verschil tussen een object binnen een klasse en een companion object in Kotlin?
sobes.tech AI
Antwoord van AI
Een inner object binnen een klasse is gekoppeld aan een instantie van de externe klasse en bestaat alleen tijdens de levenscyclus ervan. Het companion object bestaat als singleton, niet gekoppeld aan een instantie van de klasse, en kan direct worden benaderd via de naam van de klasse.
Belangrijkste verschillen:
- Koppeling aan de instantie:
inner objectis gekoppeld aan een instantie van de externe klasse,companion objectniet. - Toegang: tot
inner objectkan alleen via een instantie van de externe klasse worden verkregen, totcompanion objectdirect via de naam van de klasse. - Toestand:
inner objectkan een toestand hebben die specifiek is voor de instantie,companion objectis gemeenschappelijk voor de hele klasse. - Gebruik:
inner objectwordt vaak gebruikt voor het implementeren van het State-patroon of voor het groeperen van gerelateerde objecten binnen een instantie.companion objectwordt gebruikt voor fabrieksmethoden, constanten of statische leden van de klasse.
Voorbeeld:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object heeft toegang tot de leden van de externe klasse
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // fabrieksmethode
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // toegang tot het companion object
// val inner = Outer.InnerObject // Fout: kan niet zonder een instantie van Outer toegang krijgen tot InnerObject
val inner = outer.InnerObject // toegang tot inner object via de instantie
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // syntactische suiker voor toegang tot leden van CompanionObject
}