Sobes.tech
Junior — Middle

Kako je implementiran mehanizam proširenja funkcija na nivou interne arhitekture u Kotlinu?

sobes.tech АИ

Одговор од АИ

Механизам за проширење функција у Kotlin-у реализован је на нивоу компајлера, а не на нивоу JVM. Током компилације, проширена функција се претвара у статички метод који као први параметар прихвата објекат за који се позива проширење. То значи да проширења не мењају оригиналну класу и не додају методе у байт-код класе, већ једноставно креирају спољне функције са синтаксом позива преко тачке.

На пример, проширење за класу String:

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

val c = "Kotlin".lastChar()  // позив проширења

Компилатор ће генерисати статички метод, отприлике овако:

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

Тако, проширења су синтаксички шећер који не мења структуру класа, већ додаје погодан начин за позивање спољних функција.