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.