Sobes.tech
Junior — Middle

Ako je implementovaná a funguje rozširujúca funkcia v Kotlin na úrovni nízkoúrovňových detailov?

sobes.tech AI

Odpoveď od AI

Rozširujúce funkcie v Kotlin skutočne nepridávajú metódy do triedy na úrovni bajtkódu. Sú implementované ako statické metódy, ktoré prijímajú objekt príjemcu ako prvý parameter.

Napríklad funkcia:

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

Sa približne kompiluje na Java metódu:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

To znamená, že rozširujúce funkcie sú syntaktický cukor, ktorý umožňuje volať tieto statické metódy, akoby to boli metódy objektu. To znamená, že rozšírenia nemôžu získať prístup k súkromným členom triedy, pretože nie sú jej súčasťou.

Volanie "abc".lastChar() sa prekladá na volanie Extensions.lastChar("abc").

Teda, rozšírenia sú implementované na úrovni JVM ako bežné statické metódy s prvým parametrom — objektom, na ktorý sa rozšírenie aplikuje.