Sobes.tech
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.