Sobes.tech
Junior — Middle

Milyen korlátozások vannak a Kotlin nyelvben az kiterjesztő függvényeknél?

sobes.tech MI

Válasz az MI-től

Kotlinban a bővítési függvényeknek a következő korlátozásai vannak:

  • Nem adhatnak hozzá új tulajdonságokat vagy állapotokat az osztályokhoz. A bővítések csak függvényekkel működnek.
  • A bővítések nem módosítják a valódi osztályt, hanem statikusan oldódnak meg. Ez azt jelenti, hogy a bővítés hívása a változó típusától függ a fordítási időben, nem az objektum valódi típusától futási időben.
  • Nem lehet felülírni meglévő osztálymetódusokat bővítésekkel. Ha már létezik egy ugyanolyan nevű metódus, akkor az osztály metódusa lesz meghívva.
  • A bővítéseket nem lehet helyi függvényeken belül deklarálni. Ezeket a fájl, osztály vagy objektumszinten kell deklarálni.

Példa a statikus bővítési feloldásra:

open class Base
class Derived : Base()

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

fun printFoo(b: Base) {
    println(b.foo())
}

printFoo(Derived()) // "Base" lesz kiírva, mert a bővítés a Base típus szerint van kiválasztva

Ezért fontos figyelembe venni, amikor Kotlinban bővítési függvényeket használunk.