8.2.2 扩展函数

通过 扩展 声明完成一个类的新功能 扩展 ,而无需继承该类或使用设计模式(例如,装饰者模式)。

一个扩展String类的swap函数的例子:

1. fun String.swap(index1: Int, index2: Int): String {
2. val charArray = this.toCharArray()
3. val tmp = charArray[index1]
4. charArray[index1] = charArray[index2]
5. charArray[index2] = tmp

7. return charArrayToString(charArray)
8. }

10. fun charArrayToString(charArray: CharArray): String {
11. var result = ""
12. charArray.forEach { it -> result = result + it }
13. return result
14. }

这个 this 关键字在扩展函数内部对应到接收者对象(传过来的在点符号前的对象)。 现在,我们对任意 String 调用该函数了:

1. val str = "abcd"
2. val swapStr = str.swap(0, str.lastIndex)
3. println("str.swap(0, str.lastIndex) = $swapStr")

输出: str.swap(0, str.lastIndex) = dbca