Junior — Middle
Jaký bytecode je generován pro deklaraci companion object v Kotlin při kompilaci do Java projektu?
sobes.tech AI
Odpověď od AI
V Kotlinu, při kompilaci do bytecode JVM je deklarace companion object převedena na statickou vnořenou třídu s názvem Companion. Tato třída obsahuje všechny členy companion object jako běžné metody a pole.
V kódu Java se k členům companion object přistupuje odkazem na statické pole Companion vnější třídy.
Příklad v Kotlinu:
class MyClass {
companion object {
fun foo() = "Hello"
}
}
Kompilovaný bytecode bude obsahovat třídu MyClass$Companion s metodou foo(), a v MyClass bude statické pole Companion typu MyClass$Companion.
V Javě to vypadá přibližně takto:
MyClass.Companion.foo();
Tímto způsobem je companion object implementován jako singleton vnořené třídy přístupné přes statické pole.