A Kotlinban az extension függvény mindig statikus az implementációban?
sobes.tech MI
Válasz az MI-től
Igen, Kotlinban a kiterjesztő függvények a JVM bytekód szintjén statikus módszerként valósulnak meg. Bár szintaktikusan úgy néznek ki, mint meglévő osztályokhoz hozzáadott módszerek, valójában nem módosítják az osztályt, és nem férnek hozzá a privát tagokhoz.
Ez azt jelenti, hogy a kiterjesztő függvény megvalósítása során nincs referencia az osztály példányára (this) a szokásos módszerek értelemben. Ehelyett a kiterjesztő függvény első paramétere az az objektum, amelyre alkalmazva van.
Példa:
fun String.lastChar(): Char = this.get(this.length - 1)
A bytekódban ez úgy fog megjelenni, mint egy statikus metódus, amely egy String objektumot fogad paraméterként.
Ezért a Kotlinban a kiterjesztő függvények mindig statikusak a megvalósításukban, bár úgy néznek ki, mint példány metódusok.