Sobes.tech
Junior — Middle

¿Qué bytecode se genera para declarar un objeto companion en Kotlin al compilar en un proyecto Java?

sobes.tech AI

Respuesta de la IA

En Kotlin, durante la compilación a bytecode JVM, la declaración companion object se transforma en una clase estática anidada llamada Companion. Esta clase contiene todos los miembros del companion object como métodos y campos normales.

En el código Java, para acceder a los miembros del companion object se usa una referencia al campo estático Companion de la clase externa.

Ejemplo en Kotlin:

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

El bytecode compilado contendrá la clase MyClass$Companion con el método foo(), y en MyClass habrá un campo estático Companion de tipo MyClass$Companion.

En Java, esto se ve aproximadamente así:

MyClass.Companion.foo();

De esta forma, el companion object se implementa como un singleton de una clase anidada accesible a través de un campo estático.