一、什么是扩展
Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。
扩展类似是一个设定了使用者的外置装甲。只要符合使用条件,就可以使用这种装甲。
二、为什么要用扩展
扩展最直接的好处,代码少,写得快
举个例子,view的点击方法
Java最简洁的方式
findViewById(R.id.button).setOnClickListener(v -> doSomeThing(); 复制代码
Kotlin最简洁的方式
button.click{ doSomeThing() } funT.click(block: (T) -> Unit) = setOnClickListener{ block(it as T) } 复制代码
附加福利
众所周知,android开发中, view的重复点击是一个很常见的需要解决的问题。解决方案也很多,rxbindig,重新Listener,listenr中判断时间间隔。但都有一个缺点,代码太多啦。上吧,烤特林!
/** * 扩展属性 延时触发 即多少时间内重复点击无反应 */ private varT.triggerDelay: Long get() = if (getTag(1123461123) != null) getTag(1123461123) as Long else -1 set(value) { setTag(1123461123, value) } /** * 扩展属性 上次点击事件时间 */ private var T.triggerLastTime: Long get() = if (getTag(1123460103) != null) getTag(1123460103) as Long else 0 set(value) { setTag(1123460103, value) } /** * 私有扩展方法 计算是否过了延时期 */ private fun T.delayOver(): Boolean { var flag = false val currentClickTime = System.currentTimeMillis() if (currentClickTime - triggerLastTime >= triggerDelay) { triggerLastTime = currentClickTime flag = true } return flag } fun T.clickWithTrigger(time: Long = 600, block: (T) -> Unit) { triggerDelay = time setOnClickListener { if (delayOver()) { block(it as T) } } } // 使用 button.clickWithTrigger{ doSomeThing() }复制代码
就这样一行代码,解决view重复点击
好用的扩展在哪里
我搜集了一些kotlin常用的代码在里面,有需要的小伙伴可以扣一些下来用
再举几个常用的?
activity扩展
jumpTo() jumpToForResult (null) { resultCode, data -> }复制代码
log扩展
data.DEBUG()复制代码
数据扩展
data.addTo(arrayList)复制代码
总结
总的来说,扩展其实类似于语法糖,挺好用的。假如大家有实用的扩展也可以交流一下