欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【解密 Kotlin 扩展函数】扩展函数的导入和使用(十七)

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

2024/11/30 18:40:25 来源:https://blog.csdn.net/qq_36154755/article/details/142447492  浏览:    关键词:【解密 Kotlin 扩展函数】扩展函数的导入和使用(十七)

导读大纲

      • 1.1.1 将 joinToString 函数作为 String 类型的扩展函数
      • 1.1.2 导入和使用扩展函数

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 关键字解决冲突的唯一方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com