class User(val map: Map) {
val name: String by map
val age: Int by map
}
Ushbu misolda konstruktor assotsiativ ro'yxatni oladi
val user = User(mapOf(
"name" to "John Doe",
"age" to 25
))
Belgilangan xususiyatlar ushbu assotsiativ ro'yxatdagi qiymatlarni oladi (mag'lubiyat tugmachalari bo'yicha)
println(user.name) // Prints "John Doe" println(user.age) // Prints 25 Bundan tashqari, agar siz MutableMapuning o'rniga foydalansangiz Map, o'zgaruvchan xususiyatlar (var) qo'llab-quvvatlanadi:
class MutableUser(val map: MutableMap) {
var name: String by map
var age: Int by map
}
Faqat o'qish uchun (masalan, val ) xususiyat uchun vakil getValuequyidagi parametrlarni qabul qiladigan funktsiyani ta'minlashi kerak :
thisRef- bir xil turdagi bo'lishi yoki mulk egasining turidan meros bo'lib o'tishi kerak ( kengaytmalar uchun kengaytirilayotgan tur)
property- turi KProperty<*>yoki uning asosiy turi bo'lishi kerak . Ushbu funktsiya xususiyat bilan bir xil qiymatni qaytarishi kerak (yoki uning asosiy turi).
A uchun o'zgaruvchan mulkni ( var ), vakil kerak qo'shimcha bir vazifasi bilan ta'minlash setValuequyidagi parametrlarni qabul qiladi:
thisRef- xuddi shunday getValue(),
property- xuddi shunday getValue(),
yangi qiymat - xususiyat (yoki uning asosiy turi) bilan bir xil bo'lishi kerak.
Funksiyalar getValue()va / yoki setValue()delegatlar sinfining a'zolari sifatida yoki kengaytma sifatida taqdim etilishi mumkin . Ikkinchisi, ushbu funktsiyalarga ega bo'lmagan ob'ektga mulkni topshirish kerak bo'lganda foydalidir. Ushbu ikkala xususiyat ham kalit so'z bilan belgilanishi kerak operator.
Ushbu interfeyslar Kotlin standart kutubxonasida e'lon qilingan:
interface ReadOnlyProperty<in R, out T> {
operator fun getValue(thisRef: R, property: KProperty<*>): T
}
interface ReadWriteProperty<in R, T> {
operator fun getValue(thisRef: R, property: KProperty<*>): T
operator fun setValue(thisRef: R, property: KProperty<*>, value: T)
}
Tarjima qoidalari
Har bir topshirilgan mulk uchun sahna ortidagi Kotlin kompilyatori yordamchi xususiyatni yaratadi va unga vakolat beradi. Masalan, propmulk uchun yashirin xususiyat yaratiladi prop$delegateva getter va setterlarning bajarilishi shunchaki ushbu qo'shimcha xususiyatga beriladi: