Sobes.tech
Junior — Middle

Que bytecode é gerado para declarar um objeto companion em Kotlin ao compilar em um projeto Java?

sobes.tech IA

Resposta da IA

Em Kotlin, durante a compilação para bytecode JVM, a declaração companion object é transformada numa classe estática aninhada chamada Companion. Esta classe contém todos os membros do companion object como métodos e campos normais.

No código Java, para aceder aos membros do companion object, usa-se uma referência ao campo estático Companion da classe externa.

Exemplo em Kotlin:

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

O bytecode compilado conterá a classe MyClass$Companion com o método foo(), e em MyClass haverá um campo estático Companion do tipo MyClass$Companion.

Em Java, isto parece aproximadamente assim:

MyClass.Companion.foo();

Assim, o companion object é implementado como um singleton de uma classe aninhada acessível através de um campo estático.