Mi azak a kiterjesztések a Kotlin programozási nyelvben?
sobes.tech MI
Válasz az MI-től
A Kotlinban a kiterjesztések lehetővé teszik új funkciók vagy tulajdonságok hozzáadását meglévő osztályokhoz öröklés vagy dekorátor használata nélkül.
Fő fogalmak:
-
Kiterjesztő függvények: Új metódusokat adnak hozzá az osztályokhoz.
// Kiterjesztő függvény definíciója fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Kiterjesztő függvény használata val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString "HelloWorld" leszA
thiskulcsszó a kiterjesztésen belül az objektumra utal, amelyen a kiterjesztés hívva van (a példábanmyString). -
Kiterjesztő tulajdonságok: Lehetővé teszik új tulajdonságok hozzáadását az osztályokhoz, de nem lehetnek állapotuk, azaz nem tárolhatnak adatokat. Minden hozzáféréskor kiszámítódnak.
// Kiterjesztő tulajdonság definíciója val <T> List<T>.lastIndex: Int get() = size - 1 // Kiterjesztő tulajdonság használata val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // 2 leszA kiterjesztő tulajdonságoknak getterrel kell rendelkezniük. A setter opcionális.
Jellemzők:
-
Statikus diszpécser: A kiterjesztés hívása a változó típusától függ, nem az objektum futási idejű típusától. Ez különbözik a virtuális módszerektől az objektumorientált programozásban.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // "Parent" lesz, mert a változó típusa Parent -
Privát és protected tagok: A kiterjesztések nem férhetnek hozzá a privát vagy protected tagokhoz az osztályban, amelyet bővítenek.
-
Kiterjesztések a társosztályokban (companion object): Bővítheted egy osztály társosztályait.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // "MyClass Companion" lesz -
Láthatóság: A kiterjesztéseket egy fájlban kell deklarálni, majd importálni kell, hogy más fájlokban használhatók legyenek.
A kiterjesztések erőteljes eszközök a olvasható és rugalmas kód létrehozásához, lehetővé téve funkciók hozzáadását külső könyvtárak osztályaihoz anélkül, hogy módosítanánk azok forráskódját.