Sobes.tech
Junior — Middle

Hogyan határozza meg a Kotlin futás közben, hogy melyik osztályhoz tartozik egy kiterjesztő függvény?

sobes.tech MI

Válasz az MI-től

A Kotlinban a kiterjesztő függvények statikusak. Ez azt jelenti, hogy futás közben a függvényt meghívó objektum osztályát a változó statikus típusa alapján határozzuk meg, nem pedig az objektum valódi típusát. Más szóval, a kiterjesztő függvény nem virtuális, és nem írható felül.

Példa:

open class Base
class Derived : Base()

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

fun main() {
    val b: Base = Derived()
    println(b.foo()) // "Base"-t ír ki, annak ellenére, hogy az objektum Derived típusú
}

Itt a kiterjesztő függvény hívása a b változó (Base) típusától függ, nem pedig az objektum tényleges típusától (Derived).