【解密 Kotlin 扩展函数】扩展函数的导入和使用(十七)

1.1.1 将 joinToString 函数作为 String 类型的扩展函数

  1. 在之前的教程中, 我们已经基本实现 joinToString 函数
    • 自定义joinToString 函数–传送门
    • <1> 将原本第一个参数collection: Collection<T>作为扩展函数的接收器类型: Collection
    • <2> 与之前一样,为参数指定默认值
    • <3> 关键字this指的是接收器对象,即Collection的实例化对象
      1. 相当于将原先函数的第一个参数全部替换为this关键字
    • <4> 这里的 list 是Collection类型的实例化对象
      1. 所以可以直接将 joinToString 扩展函数作为成员方法来调用
fun <T> Collection<T>.joinToString(              // <1>
    separator: String = ", ",                    // <2>
    prefix: String = "",                         // <2>
    postfix: String = ""                         // <2>
) : String {
    val result = StringBuilder(prefix)
    for ((index, elem) in this.withIndex()){     // <3>
        if (index > 0) result.append(separator)
        result.append(elem)
    }
    result.append(postfix)
    return result.toString()
}
=============================================
fun main() {
    val list = listOf(1, 2, 3)                 // <4>
    println(
        list.joinToString(                     // <4>
            separator = "; ",
            prefix = "(",
            postfix = ")"
        )
    )
    // (1; 2; 3)
}
  1. 现在, 调用 joinToString 方法时,可以遵循函数定义,省略默认值以及使用命名参数
    • <1> 这里只传递一个参数"separator",其余参数使用默认值,可以看到输出符合预期
fun main() {
    val list = listOf(1, 2, 3)
    println(list.joinToString(" "))            // <1>
    // 1 2 3
}

1.1.2 导入和使用扩展函数

  1. 定义扩展函数后,它不会自动在整个项目中可用
    • 相反,它需要像其他类或函数一样被导入,这有助于避免意外的名称冲突
    • <1> Kotlin 允许你使用与类相同的语法导入单个函数
      1. 另外是否能导入类或函数取决于其可见性修饰符
      2. 比如,一旦该扩展函数声明为 private,则只能在定义的文件中使用无法导入
    • <2> 当然,通配符(*)导入也可以很好工作
import strings.lastChar
fun main() {
    println("hhh".lastChar())
}
====================================  <2>
import strings.*
val c = "Kotlin".lastChar()
  1. 可以使用 as 关键字为导入的类或函数取别名
import strings.lastChar as last
fun main() {
    println("hhh".last())
}
  1. 如果在不同的包中有多个同名函数
    • 并希望在同一文件中使用它们,那么导入时更改名称就非常有用
    • 对于普通类或函数,在这种情况下还有另一种选择
      1. 可以使用全限定名引用类或函数
    • 对于扩展函数,语法要求使用简短名称
      1. 所以导入语句中的 as 关键字解决冲突的唯一方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值