Sobes.tech
Junior — Middle

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.