Sobes.tech
Junior — Middle

Какъв байткод се генерира за обявяване на companion object в Kotlin при компилиране в Java проект?

sobes.tech AI

Отговор от AI

В Kotlin по време на компилация към байткод JVM декларацията companion object се преобразува в статичен вложен клас с името Companion. Този клас съдържа всички членове на companion object като обикновени методи и полета.

В Java код, за достъп до членовете на companion object, се използва препратка към статичното поле Companion на външния клас.

Пример в Kotlin:

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

Компилираният байткод ще съдържа класа MyClass$Companion с метода foo(), а в MyClass ще има статично поле Companion от тип MyClass$Companion.

В Java това изглежда приблизително така:

MyClass.Companion.foo();

По този начин, companion object се реализира като сингълтън вътрешен клас с достъп чрез статично поле.