Hogyan működnek a kiterjesztési függvények Kotlinben?
sobes.tech MI
Válasz az MI-től
A bővítési függvények lehetővé teszik, hogy új funkciókat adjunk meglévő osztályokhoz öröklés vagy dekorátorok használata nélkül.
Ezeket egy előtaggal kell deklarálni, amely megadja a bővített típus típusát:
fun String.removeFirstChar(): String {
// this a bővített típus (String) objektumára utal
return this.substring(1)
}
Amikor a bővítési függvényt hívják, a fordító azt statikus módszerré alakítja, amely első argumentumként a bővített objektumot veszi:
// A bővítési függvény hívása
val original = "Hello"
val modified = original.removeFirstChar()
// A fordító nagyjából így alakítja át a hívást:
// val modified = StringExtensionsKt.removeFirstChar(original)
(Ahol StringExtensionsKt a generált Kotlin osztály neve, amely statikus módszereket tartalmaz, ha a bővítési függvény osztályon kívül van.)
A bővítési függvények nem módosítják az osztályt. Csak szintaktikus cukorként szolgálnak a statikus módszerek hívásához. Nincs hozzáférésük a privát vagy védett tagokhoz a bővített osztályban.
A fő előnye a könnyebben olvasható kód, amely az OOP-t utánozza, miközben elkerüli az öröklési problémákat.
Bármely osztályt lehet bővíteni, beleértve a standard könyvtárakat és a Java osztályokat is. A bővítési függvények lehetnek egy másik osztály tagjai, ebben az esetben csak azon belül hívhatók.
A túlterhelések és konfliktusok megoldásakor az osztály tagfüggvényei elsőbbséget élveznek a bővítési függvényekkel szemben. Ha több bővítési függvény van ugyanazzal a szignatúrával, a helyben deklarált (ugyanazon hatókörben) lévő kerül elsőbbségbe.