Sobes.tech
Junior — Middle

Koji se bajtkod generiše za deklaraciju companion objekta u Kotlinu prilikom kompilacije u Java projekat?

sobes.tech АИ

Одговор од АИ

U Kotlin-u, tokom kompilacije u bytecode JVM, deklaracija companion object se pretvara u statičku ugnježdenu klasu pod imenom Companion. Ova klasa sadrži sve članove companion object-a kao obične metode i polja.

U Java kodu, za pristup članovima companion object-a koristi se referenca na statičko polje Companion spoljašnje klase.

Primer u Kotlin-u:

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

Kompilovani bajtkod će sadržavati klasu MyClass$Companion sa metodom foo(), a u MyClass će biti statičko polje Companion tipa MyClass$Companion.

U Javi, ovo izgleda otprilike ovako:

MyClass.Companion.foo();

Na ovaj način, companion object se implementira kao singleton ugnježdene klase sa pristupom putem statičkog polja.