Middle
Was ist der Unterschied zwischen einem Objekt innerhalb einer Klasse und einem Objektbegleiter in Kotlin?
sobes.tech KI
Antwort von AI
Ein inner object innerhalb einer Klasse ist an eine Instanz der äußeren Klasse gebunden und existiert nur während ihres Lebenszyklus. Das companion object existiert als Singleton, ist nicht an eine Instanz der Klasse gebunden und kann direkt über den Klassennamen zugänglich gemacht werden.
Hauptunterschiede:
- Bindung an die Instanz:
inner objectist an eine Instanz der äußeren Klasse gebunden,companion objectnicht. - Zugriff: auf
inner objectkann nur über eine Instanz der äußeren Klasse zugegriffen werden, aufcompanion objectdirekt über den Klassennamen. - Zustand:
inner objectkann einen zustandsabhängigen Zustand haben,companion objectist für die gesamte Klasse gemeinsam. - Verwendung:
inner objectwird häufig zur Implementierung des State-Musters oder zur Gruppierung verwandter Objekte innerhalb einer Instanz verwendet.companion objectwird für Fabrikmethoden, Konstanten oder statische Mitglieder der Klasse verwendet.
Beispiel:
class Outer {
private var outerValue: Int = 0
inner object InnerObject {
fun accessOuterValue(): Int {
return outerValue // inner object hat Zugriff auf die Mitglieder der äußeren Klasse
}
}
companion object CompanionObject {
const val CONSTANT = "Some constant"
fun createOuter(): Outer {
return Outer() // Fabrikmethode
}
}
}
fun main() {
val outer = Outer.CompanionObject.createOuter() // Zugriff auf das companion object
// val inner = Outer.InnerObject // Fehler: Zugriff auf InnerObject ohne eine Instanz von Outer
val inner = outer.InnerObject // Zugriff auf das inner object über die Instanz
println(inner.accessOuterValue())
println(Outer.CompanionObject.CONSTANT)
println(Outer.CONSTANT) // syntaktischer Zucker für den Zugriff auf Mitglieder des CompanionObject
}