Sobes.tech
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 object ist an eine Instanz der äußeren Klasse gebunden, companion object nicht.
  • Zugriff: auf inner object kann nur über eine Instanz der äußeren Klasse zugegriffen werden, auf companion object direkt über den Klassennamen.
  • Zustand: inner object kann einen zustandsabhängigen Zustand haben, companion object ist für die gesamte Klasse gemeinsam.
  • Verwendung: inner object wird häufig zur Implementierung des State-Musters oder zur Gruppierung verwandter Objekte innerhalb einer Instanz verwendet. companion object wird 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
}