Junior — Middle
Kas Kotlinis laienduste funktsioon on alati staatiline rakenduse sees?
sobes.tech AI
Vastus AI-lt
Jah, Kotlinis laajennusfunktionit ovat toteutettuina JVM:n bytecode-tasolla staattisina metodeina. Vaikka ne syntaktisesti näyttävätkin lisätyiltä metodeilta olemassa oleviin luokkiin, ne eivät varsinaisesti muuta luokkaa eivätkä pääse käsiksi yksityisiin jäseniin.
Tämä tarkoittaa, että laajennusfunktion toteutuksen sisällä ei ole viitettä luokan instanssiin (this) normaalien metodien merkityksessä. Sen sijaan, laajennusfunktion ensimmäinen parametri on objekti, johon sitä sovelletaan.
Esimerkki:
fun String.lastChar(): Char = this.get(this.length - 1)
Bytecode:ssa tämä näkyy staattisena metodina, joka ottaa String-objektin parametrina.
Näin ollen, Kotlinin laajennusfunktiot ovat aina toteutukseltaan staattisia, vaikka ne näyttävätkin olevan instanssimetodeja.