Sobes.tech
Junior — Middle

Jaki kod bajtowy jest generowany dla deklaracji obiektu companion w Kotlin podczas kompilacji w projekcie Java?

sobes.tech AI

Odpowiedź od AI

W Kotlinie, podczas kompilacji do bytecode JVM, deklaracja companion object jest przekształcana w statyczną klasę zagnieżdżoną o nazwie Companion. Ta klasa zawiera wszystkie członków companion object jako zwykłe metody i pola.

W kodzie Java, dostęp do członków companion object uzyskuje się przez odwołanie do statycznego pola Companion z klasy zewnętrznej.

Przykład w Kotlinie:

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

Skompilowany bytecode będzie zawierał klasę MyClass$Companion z metodą foo(), a w MyClass będzie statyczne pole Companion typu MyClass$Companion.

W Javie wygląda to mniej więcej tak:

MyClass.Companion.foo();

W ten sposób, companion object jest implementowany jako singleton zagnieżdżonej klasy dostępnej przez statyczne pole.