Kuidas töötavad laiendamise funktsioonid Kotlinis?
sobes.tech AI
Vastus AI-lt
Laiendamisfunktsioonid võimaldavad lisada uusi funktsioone olemasolevatele klassidele ilma pärimiseta või dekoratori kasutamiseta.
Need deklareeritakse tüübi eessõnaga, mis näitab, millist tüüpi laiendatakse:
fun String.removeFirstChar(): String {
// this viitab laiendatava objekti (String) objekti
return this.substring(1)
}
Laiendamisfunktsiooni kutsumisel teisendab kompilaator selle staatiliseks meetodiks, mille esimene argument on laiendatava tüübi objekt:
// Laiendamisfunktsiooni kutsumine
val original = "Hello"
val modified = original.removeFirstChar()
// Kompilaator teisendab kutse umbes selliseks:
// val modified = StringExtensionsKt.removeFirstChar(original)
( Kus StringExtensionsKt on loodud Kotlin-klassi nimi koos staatiliste meetoditega, kui laiendamisfunktsioon asub väljaspool klassi.)
Laiendamisfunktsioonid ei muuda klassi ennast. Nad pakuvad lihtsalt süntaksisuhkrut staatiliste meetodite kutsumiseks. Neil puudub juurdepääs privaatsel või protected liikmetele laiendatavas klassis.
Peamine eelis on koodilugemise parem selgus, mis jäljendab OOP-d, vältides pärimise probleeme.
Võite laiendada mis tahes klasse, sealhulgas standardraamatukogusid ja Java klasse. Laiendamisfunktsioonid võivad olla teise klassi liikmed, siis kutsutakse neid ainult selle klassi sees.
Kui toimub ülekoormuste ja konfliktide lahendamine, eelistatakse klassi liikmelisi funktsioone laiendamisfunktsioonidele. Kui on mitu sama signatuuriga laiendamisfunktsiooni, on prioriteet kohaliku (samasse vahemikku kuuluv) deklareeritud funktsioonil.