Sobes.tech
Junior — Middle

Je rozširujúca funkcia v Kotlinu vždy statická v rámci implementácie?

sobes.tech AI

Odpoveď od AI

Áno, v Kotlinu sú funkcie rozšírenia implementované ako statické metódy na úrovni bytecode JVM. Hoci syntakticky vyzerajú ako metódy pridelené existujúcim triedam, v skutočnosti nemenia triedu a nemajú prístup k súkromným členom.

To znamená, že vo vnútri implementácie rozšírenej funkcie neexistuje odkaz na inštanciu triedy (this) v zmysle bežných metód. Namiesto toho je prvým parametrom rozšírenej funkcie objekt, na ktorý sa aplikuje.

Príklad:

fun String.lastChar(): Char = this.get(this.length - 1)

V bytecode to bude vyzerať ako statická metóda, ktorá prijíma objekt String ako parameter.

Preto sú funkcie rozšírenia v Kotlin vždy statické v ich implementácii, aj keď vyzerajú ako metódy inštancie.