Sobes.tech
Junior — Middle

Aký bajtkód sa generuje pre deklarácie companion object v Kotlin pri kompilácii do Java projektu?

sobes.tech AI

Odpoveď od AI

V Kotlin-e, počas kompilácie do bytecode JVM, deklarácia companion object sa premení na statickú vnorenú triedu s názvom Companion. Táto trieda obsahuje všetky členy companion object ako bežné metódy a polia.

V Java kóde sa k členom companion object pristupuje odkazom na statické pole Companion vonkajšej triedy.

Príklad v Kotlin-e:

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

Kompilovaný bytecode bude obsahovať triedu MyClass$Companion s metódou foo(), a v MyClass bude statické pole Companion typu MyClass$Companion.

V Jave to vyzerá približne takto:

MyClass.Companion.foo();

Týmto spôsobom je companion object implementovaný ako singleton vnútornej triedy prístupnej cez statické pole.