在Kotlin中,委托屬性有以下幾種:
lazy
屬性:延遲初始化屬性,只有在首次訪問時才會進行初始化。val lazyValue: String by lazy {
println("computed")
"Hello"
}
observable
屬性:屬性變化監聽器,當屬性被賦新值時,會調用監聽器。var name: String by Delegates.observable("initial value") { prop, old, new ->
println("$old -> $new")
}
vetoable
屬性:屬性變化攔截器,當屬性被賦新值時,可以根據條件決定是否接受新值。var age: Int by Delegates.vetoable(0) { prop, old, new ->
new >= 0
}
map
屬性:通過Map委托實現屬性存儲。val userMap = mutableMapOf("name" to "Alice", "age" to 30)
val name: String by userMap
val age: Int by userMap
除了以上幾種常見的委托屬性,Kotlin還支持自定義委托屬性,開發者可以根據自己的需求實現自定義的委托屬性。