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.