Middle
Kas yra delegavimas Kotlin'e?
sobes.tech AI
Atsakymas iš AI
Kotlin delegavimas — tai projektavimo šablonas, kuriame objektas (delegatas) perima atsakomybę už tam tikro užduoties vykdymą kito objekto vardu. Kotlin palaiko nativų delegavimą sintaksės lygyje.
Yra du pagrindiniai delegavimo tipai Kotlin:
-
Klasės delegavimas (Class Delegation): Leidžia klasei A įgyvendinti sąsają, deleguojant visus šios sąsajos metodų iškvietimus kitam objektui B.
interface Base { fun printMessage() } class BaseImpl(val x: Int) : Base { override fun printMessage() { // Sąsajos metodo įgyvendinimas println(x) } } class Derived(b: Base) : Base by b // Delegavimas klasei BasePavyzdyje
DeriveddeleguojaBaseįgyvendinimą objektuib. -
Savybių delegavimas (Delegated Properties): Leidžia deleguoti logiką, susijusią su savybės gavimu ir nustatymu, kitam objektui. Kotlin siūlo keletą standartinių delegatų:
lazy()vėlyvai inicializacijai.val lazyValue: String by lazy { // Vykdoma tik pirmą kartą, kai kreipiamasi į lazyValue println("skaičiuojama!") "Labas" }Delegates.observable()įspėjimui apie pokyčius.import kotlin.properties.Delegates var name: String by Delegates.observable("initial value") { prop, old, new -> println("$old -> $new") }Delegates.vetoable()pakeitimų sulaikymui prieš jų taikymą.import kotlin.properties.Delegates var max: Int by Delegates.vetoable(0) { prop, old, new -> new > old }- Delegatai, susiejantys su žemėlapio (
map) savybėmis.Naudojimas:class User(val map: Map<String, Any?>) { val name: String by map val age: Int by map }User(mapOf("name" to "John Doe", "age" to 25))
Kotlin delegavimo privalumai:
- Mažesnis boilerplate kodas: Automatinis metodų ar savybių logikos nukreipimas.
- Kodo pakartotinis naudojimas: Galimybė naudoti paruoštus delegatus arba kurti savo.
- Atsakomybės pasidalijimas: Aiškus logikos ar sąsajos atskyrimas.
- Lankstumas: Galimybė keisti delegavimo elgesį be klasės keitimo.