Ce sunt extensiile în limbajul de programare Kotlin?
sobes.tech AI
Răspuns de la AI
Extensiile în Kotlin permit adăugarea de noi funcții sau proprietăți la clase existente fără a le moșteni sau a folosi decoratori.
Concepte principale:
-
Funcții de extensie: Adaugă metode noi claselor.
// Definirea unei funcții de extensie fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Utilizarea funcției de extensie val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString va fi "HelloWorld"Cuvântul cheie
thisdin interiorul funcției de extensie face referire la obiectul pe care se aplică extensia (în exemplu,myString). -
Proprietăți de extensie: Permite adăugarea de noi proprietăți claselor, dar nu pot avea stare, adică nu pot stoca date. Sunt calculate la fiecare acces.
// Definirea unei proprietăți de extensie val <T> List<T>.lastIndex: Int get() = size - 1 // Utilizarea proprietății de extensie val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast va fi 2Proprietățile de extensie trebuie să aibă un getter. Setter-ul este opțional.
Caracteristici:
-
Dispatch static: Apelul extensiei este determinat de tipul variabilei, nu de tipul obiectului în timpul execuției. Acest lucru diferă de metodele virtuale în programarea orientată pe obiecte.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Va afișa "Parent", deoarece tipul variabilei 'p' este Parent -
Membri privați și protejați: Extensiile nu pot accesa membrii privați sau protejați ai clasei pe care o extind.
-
Extensii în obiecte companion: Se pot extinde obiectele companion ale unei clase.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Va afișa "MyClass Companion" -
Domeniu de vizibilitate: Extensiile trebuie declarate într-un fișier și apoi importate pentru a fi utilizate în alte fișiere.
Extensiile sunt un instrument puternic pentru crearea de cod lizibil și flexibil, permițând adăugarea de funcționalitate claselor din biblioteci externe fără a le modifica codul sursă.