Middle
Milline on omadusdelegeerijate eripära?
sobes.tech AI
Vastus AI-lt
Kotlin-iga omaduste delegaadid võimaldavad loogika omaduse saamise ja määramise üle viia eraldi abiklassile, mida nimetatakse delegaat.
Omaduste omadused:
-
getValuejasetValuemõistmine: Loetavate omaduste (val) jaoks peab delegaat omamagetValuemeetodit. Loetavate ja kirjutatavate omaduste (var) jaoks peab delegaat omama niigetValue, kui kasetValue. Need meetodid võtavad parameetritena:- viite objekti, mis sisaldab omadust (klassi liikmed).
KPropertyobjekti metaandmed.
-
Standarddelegaadid: Kotlin pakub mitmeid standarddelegaatide tüüpe:
lazy: omaduse hilinenud initsialiseerimine.observable: tegevus, mis toimub omaduse väärtuse muutmisel.vetoable: tegevus omaduse väärtuse muutmisel koos võimalusega muudatus tühistada.- Map-delegaadid: omadus võib olla salvestatud
Map-i.
-
Oma delegaadid: Võite luua ka oma klasside delegaate. Klass peab rakendama
ReadOnlyProperty(val) võiReadWriteProperty(var) liideseid.
lazy näide:
// Väli initsialiseerub ainult esimese juurdepääsu ajal
val lazyValue: String by lazy {
println("Väärtuse arvutamine")
"Hello"
}
observable näide:
import kotlin.properties.Delegates
var name: String by Delegates.observable("<pole nime>") {
property, oldValue, newValue ->
println("$oldValue -> $newValue")
}
Kasutaja loodud delegaat:
import kotlin.reflect.KProperty
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$thisRef, omaduse '${property.name}' väärtus"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("$thisRef, omaduse '${property.name}' väärtus muudetud — '$value'")
}
}
class Example {
var p: String by Delegate()
}