Android 知识

Kotlin代码进阶模式-委托

2022-05-05  本文已影响0人  zcwfeng

Delegates.kt

在Java代码中,一般使用接口来进行封装,而在kotlin中,可以通过委托机制来实现更加方便的委托模式。

关于封装的时候,使用set/get 非常实用的委托模式

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 与 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"

委托还可以用于在不修改原来代码及架构的基础上,对原有功能扩展或者修改

上一篇下一篇

猜你喜欢

热点阅读