Sobes.tech
Junior — Middle

Como é que o Kotlin determina em tempo de execução a que classe uma função de extensão se aplica?

sobes.tech IA

Resposta da IA

As funções de extensão em Kotlin são de natureza estática. Isso significa que, em tempo de execução, a classe do objeto ao qual a função é chamada é determinada com base no tipo estático da variável, e não no tipo real do objeto. Em outras palavras, a função de extensão não é virtual e não pode ser sobrescrita.

Exemplo:

open class Base
class Derived : Base()

fun Base.foo() = "Base"
fun Derived.foo() = "Derived"

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Vai imprimir "Base", apesar de o objeto ser de tipo Derived
}

Aqui, a chamada à função de extensão é determinada pelo tipo da variável b (Base), e não pelo tipo real do objeto (Derived).