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.