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
  6. return charArrayToString(charArray)
  7. }
  8. fun charArrayToString(charArray: CharArray): String {
  9. var result = ""
  10. charArray.forEach { it -> result = result + it }
  11. return result
  12. }

这个 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