Sobes.tech
Junior — Middle

Qual é o resultado da compilação do companion object em Kotlin em relação ao código Java?

sobes.tech IA

Resposta da IA

Em Kotlin, companion object compila-se em Java como uma classe aninhada estática dentro da classe externa. Todos os membros do companion object tornam-se métodos e campos estáticos dessa classe aninhada.

Para facilitar a chamada a partir de Java, é criado um campo estático chamado Companion na classe externa, através do qual se pode aceder aos membros do companion object.

Por exemplo, código Kotlin:

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

Compila aproximadamente assim em Java:

public final class MyClass {
    public static final MyClass.Companion Companion = new MyClass.Companion(null);

    public static final class Companion {
        public final String foo() {
            return "Hello";
        }
    }
}

Desta forma, do Java, pode-se chamar o método assim:

String greeting = MyClass.Companion.foo();

Se no companion object forem declaradas anotações @JvmStatic, os métodos e campos correspondentes serão gerados como membros estáticos da classe externa, permitindo chamá-los diretamente sem recorrer ao Companion.