Sobes.tech
Junior — Middle

Je rozšiřující funkce v Kotlinu vždy statická uvnitř implementace?

sobes.tech AI

Odpověď od AI

Ano, v Kotlinu jsou rozšiřující funkce implementovány jako statické metody na úrovni bytecode JVM. Ačkoliv syntakticky vypadají jako metody přidané ke stávajícím třídám, ve skutečnosti nem mění třídu a nemají přístup k soukromým členům.

To znamená, že uvnitř implementace rozšiřující funkce neexistuje odkaz na instanci třídy (this) ve smyslu běžných metod. Místo toho je prvním parametrem rozšiřující funkce objekt, na který se aplikuje.

Příklad:

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

V bytecode to bude vypadat jako statická metoda přijímající objekt String jako parametr.

Tudíž jsou rozšiřující funkce v Kotlinu vždy statické ve své implementaci, i když vypadají jako metody instance.