Čo sú rozšírenia v jazyku Kotlin?
sobes.tech AI
Odpoveď od AI
Rozšírenia v Kotlin umožňujú pridávať nové funkcie alebo vlastnosti k existujúcim triedam bez dedičnosti alebo použitia dekorátora.
Hlavné koncepty:
-
Rozšírené funkcie (Extension Functions): Pridávajú nové metódy k triedam.
// Definícia rozšírenej funkcie fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Použitie rozšírenej funkcie val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString bude "HelloWorld"Kľúčové slovo
thisvnútri rozšírenej funkcie odkazuje na objekt, na ktorý sa rozšírenie volá (v príklade vyššie namyString). -
Vlastnosti rozšírenia (Extension Properties): Umožňujú pridávať nové vlastnosti k triedam, ale nemôžu mať stav, teda nemôžu ukladať dáta. Sú vypočítavané pri každom prístupe.
// Definícia vlastnosti rozšírenia val <T> List<T>.lastIndex: Int get() = size - 1 // Použitie vlastnosti rozšírenia val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast bude 2Vlastnosti rozšírenia musia mať getter. Setter je voliteľný.
Špeciálne vlastnosti:
-
Statická dispatch: Volanie rozšírenia je určené typom premennej, nie typom objektu počas behu. To sa líši od virtuálnych metód v objektovo-orientovanom programovaní.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Vypíše "Parent", pretože typ premennej 'p' je Parent -
Súkromné a protected členy: Rozšírenia nemôžu pristupovať k súkromným alebo protected členom triedy, ktorú rozširujú.
-
Rozšírenia pre companion object: Môžu rozširovať objekty-kompány tried.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Vypíše "MyClass Companion" -
Oblasť viditeľnosti (Visibility): Rozšírenia musia byť deklarované v súbore a následne importované na použitie v iných súboroch.
Rozšírenia sú mocný nástroj na tvorbu čitateľného a flexibilného kódu, umožňujú pridávať funkcionalitu k triedam z externých knižníc bez zmeny ich zdrojového kódu.