Sobes.tech
Junior — Middle

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.