Sobes.tech
Junior — Middle

Hogyan alakul át a companion object szerkezete bytecode-ba Kotlin fordítás során?

sobes.tech MI

Válasz az MI-től

Kotlinben a companion object egy statikus beágyazott osztályként fordul le a külső osztályon belül. A fordítás során létrejön egy külön osztály, például OuterClass$Companion, amely tartalmazza a companion object összes tagját statikus metódusokként és mezőkként.

Ezenkívül a külső osztályban létrejön egy statikus Companion mező, amely a beágyazott osztály egyetlen példányára hivatkozik. Ez lehetővé teszi a companion object tagjainak elérését OuterClass.Companion-on keresztül vagy közvetlenül, ha importálva van.

Így a companion object megvalósítja a singleton mintát és a JVM-kompatibilis statikus tagokat, külön beágyazott osztály és statikus referencia mező segítségével.