Ի՞նչ է հատկությունների դելեգատների առանձնահատկությունը։
sobes.tech AI
Պատասխան AI-ից
Kotlin- ում հատկությունների դելեգատները թույլ են տալիս փոխանցել հատկության արժեքի ստացման և սահմանման տրամաբանությունը առանձին օգնական դասին, որը կոչվում է դելեգատ:
Հատկությունների առանձնահատկությունները՝
-
getValueևsetValueըմբռնումը: Կարդացվող հատկությունների համար (val) դելեգատը պետք է ունենաgetValueմեթոդ: Կարդացվող և գրանցվող հատկությունների համար (var) դելեգատը պետք է ունենա ինչպեսgetValue, այնպես էլsetValue: Այս մեթոդները ստանում են որպես պարամետրեր՝- հղում հատկություն պարունակող օբյեկտին (կլասի անդամների համար):
- հատկության մետադատվյալները
KPropertyօբյեկտի տեսքով:
-
Ստանդարտ դելեգատներ: Kotlin- ն ապահովում է մի շարք ստանդարտ դելեգատներ՝
lazy: հատկության հետաձգված ինիցիալիզացիա համար:observable: որոշ գործողություն կատարելու համար հատկության արժեքը փոխելու ժամանակ:vetoable: որոշ գործողություն կատարելու համար, երբ հատկության արժեքը փոխվում է, հնարավոր է չեղարկել փոփոխությունը:- Map- ի համար դելեգատներ՝ հատկությունը կարող է պահվել
Map-ում:
-
Համայն դելեգատներ: Կարող եք ստեղծել սեփական դասեր-դելեգատներ: Դասը պետք է իրականացնել
ReadOnlyProperty(val- ի համար) կամReadWriteProperty(var- ի համար) ինտերֆեյսները:
Օրինակ՝ lazy- ի օգտագործման:
// Դաշտը միայն առաջին մուտքի ժամանակ է ինիցիալիզացվում
val lazyValue: String by lazy {
println("Արժեքը հաշվարկում եմ")
"Hello"
}
Օրինակ՝ observable- ի օգտագործման:
import kotlin.properties.Delegates
var name: String by Delegates.observable("<ոչ անուն>") {
property, oldValue, newValue ->
println("$oldValue -> $newValue")
}
Օրինակ՝ օգտագործողի սահմանած դելեգատ:
import kotlin.reflect.KProperty
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
return "$thisRef, հատկության արժեքը '${property.name}'"
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
println("$thisRef, հատկության '${property.name}' արժեքը փոխվել է՝ '$value'")
}
}
class Example {
var p: String by Delegate()
}