Co jsou rozšíření v jazyce Kotlin?
sobes.tech AI
Odpověď od AI
Rozšíření v Kotlinu umožňují přidávat nové funkce nebo vlastnosti ke stávajícím třídám bez dědičnosti nebo použití dekorátorů.
Hlavní koncepty:
-
Rozšiřující funkce: Přidávají nové metody ke třídám.
// Definice rozšiřující funkce fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Použití rozšiřující funkce val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString bude "HelloWorld"Klíčové slovo
thisuvnitř rozšiřující funkce odkazuje na objekt, na který je volána (v příkladu výšemyString). -
Rozšiřující vlastnosti: Umožňují přidávat nové vlastnosti ke třídám, ale nemohou mít stav, tj. nemohou ukládat data. Jsou vypočítávány při každém přístupu.
// Definice rozšiřující vlastnosti val <T> List<T>.lastIndex: Int get() = size - 1 // Použití rozšiřující vlastnosti val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // 2Rozšiřující vlastnosti musí mít getter. Setter je volitelný.
Vlastnosti:
-
Statická dispatch: Volání rozšíření je určeno typem proměnné, nikoli typem objektu za běhu. To se liší od virtuálních metod v objektově orientovaném programování.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Vytiskne "Parent", protože typ proměnné 'p' je Parent -
Privátní a chráněné členy: Rozšíření nemohou přistupovat k privátním nebo chráněným členům třídy, kterou rozšiřují.
-
Rozšíření v companion object: Můžete rozšířit objekty companion třídy.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Vytiskne "MyClass Companion" -
Viditelnost: Rozšíření musí být deklarována v souboru a poté importována pro použití v jiných souborech.
Rozšíření jsou mocným nástrojem pro vytváření čitelného a flexibilního kódu, umožňující přidávat funkčnost ke třídám z knihoven třetích stran bez změny jejich zdrojového kódu.