1、observable觀察屬性變化,相當(dāng)于,每次屬性被賦值(初始化也算一次賦值)例如:
首先,需要導(dǎo)入?Delegates類,
import kotlin.properties.Delegates
class User {
? ? var name: String by Delegates.observable("<no name>") {
? ? ? ? prop, old, new ->
? ? ? ? println("$old -> $new")
? ? }
}
fun main(args: Array<String>) {
? ? val user = User()
? ? user.name = "first"
? ? user.name = "second"
}
結(jié)果:
<no name> -> first
first -> second
2、map操作,其實(shí)是調(diào)用Delegates.mapVal()方法, 擁有一個(gè) map 實(shí)例并返回一個(gè)可以從 map 中讀其中屬性的代理。在應(yīng)用中有很多這樣的例子,比如解析 JSON 或者做其它的一些 “動(dòng)態(tài)”的事情
class User(val map: Map<String, Any?>) {
val name: String by Delegates.mapVal(map)
val age: Int? ? by Delegates.mapVal(map)
}
調(diào)用:
val user = User(mapOf (
? ? ? ? "name" to "John Doe",
? ? ? ? ?"age" to 25
))