Sobes.tech
Junior — Middle

Ako je implementovaný mechanizmus rozšírenia funkcií na úrovni vnútorné architektúry v Kotlin?

sobes.tech AI

Odpoveď od AI

V Kotlinu je mechanizmus rozšírenia funkcií implementovaný na úrovni prekladača, nie na úrovni JVM. Počas prekladu sa rozšírená funkcia premení na statickú metódu, ktorá ako prvý parameter prijíma objekt, pre ktorý je rozšírenie volané. To znamená, že rozšírenia nemenia pôvodnú triedu a nepridávajú metódy do bajtkódu triedy, ale vytvárajú len externé funkcie s syntaxou volania cez bodku.

Napríklad rozšírenie pre triedu String:

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

val c = "Kotlin".lastChar()  // volanie rozšírenia

Prekladač vygeneruje statickú metódu, približne takto:

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

Týmto spôsobom sú rozšírenia syntaktický cukor, ktorý nemení štruktúru tried, ale pridáva pohodlný spôsob volania externých funkcií.