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.