Sobes.tech
Junior — Middle

Kokį baitkodo generuoja Kotlin kompiliuojant companion object Java projekte?

sobes.tech AI

Atsakymas iš AI

Kotlin'e, kompiliuojant į JVM baitkodą, companion object deklaracija paverčiama į statinį vidinį klasę, vadinamą Companion. Ši klasė apima visus companion object narius kaip įprastus metodus ir laukus.

Java kode, norint pasiekti companion object narius, naudojamas nuoroda į statinį lauką Companion iš išorinės klasės.

Pavyzdys Kotlin'e:

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

Kompiliuotas baitkodas turės klasę MyClass$Companion su metodu foo(), o MyClass turės statinį lauką Companion tipo MyClass$Companion.

Java'e tai atrodo maždaug taip:

MyClass.Companion.foo();

Taip, companion object yra įgyvendinamas kaip singleton vidinis klasės, prieinamą per statinį lauką.