Sobes.tech
Junior — Middle

Kā Kotlin noteikt izpildes laikā, kurai klasei piemērojas paplašināšanas funkcija?

sobes.tech AI

Atbilde no AI

Kotlin paplašināšanas funkcijas ir pēc savas dabas statiskas. Tas nozīmē, ka izpildes laikā tiek noteikta objekta klase, uz kuru tiek izsaukta funkcija, balstoties uz statisko mainīgā tipu, nevis uz faktiskā objekta tipu. Citiem vārdiem sakot, paplašināšanas funkcija nav virtuāla un to nevar pārrakstīt.

Piemērs:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // Izvadīs "Base", neskatoties uz to, ka objekts ir Derived
}

Šeit paplašināšanas funkcijas izsaukums ir atkarīgs no mainīgā b (Base) tipa, nevis no faktiskā objekta tipa (Derived).