Sobes.tech
Junior — Middle

Como é que a função de extensão é implementada e funciona em Kotlin ao nível de detalhes de baixo nível?

sobes.tech IA

Resposta da IA

As funções de extensão em Kotlin na verdade não adicionam métodos à classe ao nível do bytecode. Elas são implementadas como métodos estáticos que aceitam um objeto receptor como primeiro parâmetro.

Por exemplo, uma função:

fun String.lastChar(): Char = this.get(this.length - 1)

Compila aproximadamente para um método Java:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

Ou seja, as funções de extensão são açúcar sintático que permite chamar esses métodos estáticos como se fossem métodos do objeto. Isso significa que as extensões não podem acessar membros privados da classe, pois não fazem parte dela.

A chamada "abc".lastChar() compila para uma chamada a Extensions.lastChar("abc").

Assim, as extensões são implementadas ao nível JVM como métodos estáticos comuns com o primeiro parâmetro sendo o objeto ao qual a extensão é aplicada.