Middle
Kāda ir īpašību deleģentu īpatnība?
sobes.tech AI
Atbilde no AI
Kotlin īpašību deleģāti ļauj pārlikt īpašības iegūšanas un iestatīšanas loģiku uz atsevišķu palīgklasi, ko sauc par deleģātu.
Īpašību īpašības:
-
getValueunsetValuesapratne: Lasāmajām īpašībām (val) deleģātam jābūtgetValuemetodēm. Lasāmajām un rakstāmajām īpašībām (var) deleģātam jābūt gangetValue, gansetValue. Šīs metodes pieņem kā parametrus:- atsauci uz objektu, kas satur īpašību (klases locekļi).
KPropertyobjekta metadatus.
-
Standarta deleģāti: Kotlin ir pieejami vairāki standarta deleģāti:
lazy: īpašības aizkavēta inicializācija.observable: darbība, kas tiek veikta, mainot īpašības vērtību.vetoable: darbība, kas tiek veikta, mainot īpašības vērtību ar iespēju atteikties no izmaiņām.- Map deleģāti: īpašība var tikt glabāta
Mapobjektā.
-
Pašizveidoti deleģāti: Var izveidot savas klases deleģātus. Klasei jāīsteno
ReadOnlyProperty(val) vaiReadWriteProperty(var) saskarnes.
lazy piemērs:
// Laukums tiek inicializēts tikai pirmās piekļuves laikā
val lazyValue: String by lazy {
println("Aprēķinu vērtību")
"Hello"
}
observable piemērs:
import kotlin.properties.Delegates
var name: String by Delegates.observable("<nav nosaukts>") {
property, oldValue, newValue ->
println("$oldValue -> $newValue")
}
Lietotāja izveidots deleģāts:
import kotlin.reflect.KProperty
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$thisRef, īpašības '${property.name}' vērtība"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("$thisRef, īpašības '${property.name}' vērtība mainīta uz '$value'")
}
}
class Example {
var p: String by Delegate()
}