扩展是Kotlin中特别强大的一个功能,如扩展函数,本文是学习Kotlin中的扩展(Extensions)和This表达式的相关知识。
扩展(Extensions)
在Java开发时,会经常将那些共用的方法写到一个Utils
类,如FileUtils
,StringUtils
等等。很有名的java.util.Collections
也是其中一员的,在使用的时候
Collections.swap(list, Collections.binarySearch(list, Collections.max(otherList)), Collections.max(list))
Kotlin中提供了一种可以在不继承父类,也不使用类似Decorator
这样的设计模式的情况下对指定类进行扩展,在Kotlin中称为扩展的特殊声明,支持函数扩展和属性扩展。
如上面的可以写成
list.swap(list.binarySearch(otherList.max()), list.max())
比如要将Toast
写成可以直接调用toast(this, "toast")
fun Context.toast(context: Context, content: String) {
Toast.makeText(context, content, Toast.LENGTH_SHORT).show()
}
扩展函数(Extension Functions)
要声明一个扩展函数,我们需要在函数的名称前加上一个接收者类型并且加上.
符号
/**
* MutableList<Int> 添加一个 swap() 扩展函数
*/
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // this对应list
this[index1] = this