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 се реализира като сингълтън вътрешен клас с достъп чрез статично поле.