Kotlin代码进阶模式-委托
2022-05-05 本文已影响0人
zcwfeng
Delegates.kt
- 属性委托
在Java代码中,一般使用接口来进行封装,而在kotlin中,可以通过委托机制来实现更加方便的委托模式。
关于封装的时候,使用set/get 非常实用的委托模式
- 观察属性observable
var name:String by Delegates.observable(""){_,_,newvalue->
helper.getView<TextView>(R.id.tvName).text = newvalue
}
两次返回键退出的逻辑
private var backPressedTime by Delegates.observable(0L) { pre, old, new ->
if (new - old < 2000) {
finish()
} else {
Toast.makeText(this, "再按一次返回退出", Toast.LENGTH_SHORT).show()
}
}
override fun onBackPressed() {
backPressedTime = System.currentTimeMillis()
}
- 条件观察属性vetoable
vetoable 与 observable一样,可以观察属性值的变化,不同的是,vetoable可以通过处理器函数来决定属性值是否生效
var vetoableProp: Int by Delegates.vetoable(0) { _, oldValue, newValue ->
// 如果新的值大于旧值,则生效
newValue > oldValue
}
vetoableProp = -1
println(vetoableProp)
对比一下
var vetoableProp: Int by Delegates.vetoable(0) { _, oldValue, newValue ->
// 如果新的值大于旧值,则生效
newValue > oldValue
}
vetoableProp = -1//8
println(vetoableProp)
var observableProp: String by Delegates.observable("init value 0") { property, oldValue, newValue ->
println("change: $property: $oldValue -> $newValue ")
}
println(observableProp)
observableProp = "change value666666"
- 类委托的使用场景
委托还可以用于在不修改原来代码及架构的基础上,对原有功能扩展或者修改