Junior — Middle
Jak je implementován mechanismus rozšíření funkcí na úrovni vnitřní architektury v Kotlinu?
sobes.tech AI
Odpověď od AI
V Kotlinu je mechanismus rozšíření funkcí implementován na úrovni překladače, nikoliv na úrovni JVM. Při kompilaci je rozšířená funkce převedena na statickou metodu, která přijímá jako první parametr objekt, pro který je rozšíření voláno. To znamená, že rozšíření nemění původní třídu a nepřidávají metody do bytekódu třídy, ale vytvářejí pouze externí funkce s syntaxí volání přes tečku.
Například rozšíření pro třídu String:
fun String.lastChar(): Char = this.get(this.length - 1)
val c = "Kotlin".lastChar() // volání rozšíření
Kompilátor vygeneruje statickou metodu, přibližně takto:
public static char lastChar(String receiver) {
return receiver.charAt(receiver.length() - 1);
}
Tímto způsobem jsou rozšíření syntaktickým cukrem, který nemění strukturu tříd, ale přidává pohodlný způsob volání externích funkcí.