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.