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).