博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开发效率]Kotlin之扩展
阅读量:6581 次
发布时间:2019-06-24

本文共 1972 字,大约阅读时间需要 6 分钟。

一、什么是扩展

Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。

扩展类似是一个设定了使用者的外置装甲。只要符合使用条件,就可以使用这种装甲。

二、为什么要用扩展

扩展最直接的好处,代码少,写得快

举个例子,view的点击方法

Java最简洁的方式
findViewById(R.id.button).setOnClickListener(v -> doSomeThing();      复制代码
Kotlin最简洁的方式
button.click{     doSomeThing()   }      fun 
T.click(block: (T) -> Unit) = setOnClickListener{ block(it as T) } 复制代码
附加福利

众所周知,android开发中, view的重复点击是一个很常见的需要解决的问题。解决方案也很多,rxbindig,重新Listener,listenr中判断时间间隔。但都有一个缺点,代码太多啦。上吧,烤特林!

/**    *  扩展属性 延时触发  即多少时间内重复点击无反应    */    private var 
T.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)复制代码

总结

总的来说,扩展其实类似于语法糖,挺好用的。假如大家有实用的扩展也可以交流一下

转载于:https://juejin.im/post/5c0a480ae51d45242973d0b5

你可能感兴趣的文章
教你打包自己的专属docker镜像
查看>>
MySQL主从多种架构部署及常见错误问题解析
查看>>
关于负载均衡的几个知识点
查看>>
使用xtrabackup备份innodb引擎的数据库
查看>>
jQuery EasyUI DataGrid动态合并单元格解决方案
查看>>
V 2 heartbeat V2(HA)
查看>>
程序员回家过年生存指南
查看>>
Vim应用
查看>>
esxi安装
查看>>
14、系统架构师指南 - 软件项目角色指南系列文章
查看>>
微软职位内部推荐-SW Engineer II for Windows System
查看>>
【技术交流】让我们来谈一谈多线程和并发任务
查看>>
功能对外vsftpd 服务搭建过程
查看>>
Linux下有7种运行级别
查看>>
Redis分布式锁
查看>>
/etc/fstab文件说明
查看>>
zabbix应用之Low-level discovery监控磁盘IO
查看>>
ROW ARCHIVE
查看>>
Tech-ED2006会场见闻图片集
查看>>
python 自定义异常类学习
查看>>