Hogyan valósul meg és működik a Kotlinban az kiterjesztő függvény alacsony szintű részletek szintjén?
sobes.tech MI
Válasz az MI-től
A Kotlinban a kiterjesztő függvények valójában nem adnak hozzá metódusokat a osztályhoz bytecode szinten. Ezek statikus módszerként vannak megvalósítva, amelyek első paraméterként fogadják a fogadó objektumot.
Például egy függvény:
fun String.lastChar(): Char = this.get(this.length - 1)
Kb. így fordul le egy Java-metódusra:
public static char lastChar(String receiver) {
return receiver.charAt(receiver.length() - 1);
}
Ez azt jelenti, hogy a kiterjesztő függvények szintaktikus cukorként működnek, amelyek lehetővé teszik, hogy ezeket a statikus metódusokat úgy hívjuk, mintha azok az objektum metódusai lennének. Ez azt jelenti, hogy a kiterjesztések nem férhetnek hozzá a osztály privát tagjaihoz, mivel nem részei annak.
A "abc".lastChar() hívás fordul le Extensions.lastChar("abc") hívásra.
Így a kiterjesztések a JVM szinten normál statikus módszerként vannak megvalósítva, az első paraméter pedig az az objektum, amelyre a kiterjesztést alkalmazzuk.