开启一系列新文章记录Kotlin有关内容,基础语法部分就不过多赘述了,大家可以参见Kotlin官方白皮书,主要是记录一些个人对于该语音部分特性的理解。
定义
首先,看一下官方对于扩展的定义:
能够扩展一个类的新功能而无需继承该类或使用像装饰者这样的任何类型的设计模式。 这通过叫做 扩展 的特殊声明完成。Kotlin 支持 扩展函数 和 扩展属性。
其实也不难理解,我们对比Java的特性分析一下:
Java语言中,类与类之间的功能是独立的,一个类能够获得其他类的属性或者功能时,需要通过继承来实现;或者持有其他类的实例对象从而获取它的功能(装饰者模式)等方式或手段来扩展一个有限功能的类。
而在Kotlin中,操作与实现将会变得更加简单方便,轻松的便可以对现有类进行拓展。
拓展函数
声明一个扩展函数,我们需要用一个 接收者类型 也就是被扩展的类型来作为他的前缀。
举个例子:
fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this,message,duration).show()
}
这样一来,Context和任意它的子类都可以使用toast函数来完成弹窗。
这个 this 关键字在扩展函数内部对应到接收者对象(传过来的在点符号前的对象)。
同样的也能对泛型进行拓展:
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // “this”对应该列表
this[index1] = this[index2]
this[index2] = tmp
}
val l = mutableListOf(<