Sobes.tech
Junior — Middle

Welchen Bytecode wird für die Deklaration eines Companion-Objekts in Kotlin beim Kompilieren in einem Java-Projekt generiert?

sobes.tech KI

Antwort von AI

In Kotlin wird bei der Kompilierung in Bytecode für die JVM die Deklaration companion object in eine statische verschachtelte Klasse mit dem Namen Companion umgewandelt. Diese Klasse enthält alle Mitglieder des companion object als gewöhnliche Methoden und Felder.

Im Java-Code wird auf die Mitglieder des companion object über eine Referenz auf das statische Feld Companion der äußeren Klasse zugegriffen.

Beispiel in Kotlin:

class MyClass {
    companion object {
        fun foo() = "Hello"
    }
}

Der kompilierte Bytecode enthält die Klasse MyClass$Companion mit der Methode foo(), und in MyClass gibt es ein statisches Feld Companion vom Typ MyClass$Companion.

In Java sieht das ungefähr so aus:

MyClass.Companion.foo();

Auf diese Weise wird das companion object als Singleton einer verschachtelten Klasse implementiert, auf die über ein statisches Feld zugegriffen wird.