先用人话理解
扩展函数可以让你用更自然的点号语法,为已有类型提供新操作。它不会真的修改原类,也不能突破原有的访问权限。
本课要点:扩展函数的接收者类型写在函数名前,例如 String.isLikelyPhone。手机号校验示例只适合初步格式判断,不代表号码真实存在。
代码例子
先读注释,再关注每一行如何把数据变成结果。
KOTLIN · 可独立运行
fun String.isLikelyPhone(): Boolean =
Regex("""1[3-9]\d{9}""").matches(this) // 只做格式检查,不代表号码真实存在
val String.wordCount: Int
get() = trim().split(Regex("""\s+""")).filter { it.isNotEmpty() }.size
fun main() {
println("13800138000".isLikelyPhone()) // true
println("12345".isLikelyPhone()) // false
val title = " Kotlin 入门 "
println(title.wordCount) // 2
}再看一个用法
KOTLIN · 可独立运行
fun String.hasAtLeastFiveChars(): Boolean = length >= 5
fun main() {
println("Kotlin".hasAtLeastFiveChars()) // true
println("猫".hasAtLeastFiveChars()) // false
}动手改一改
fun String.hasAtLeastFiveChars(): Boolean = length >= 5 println("Kotlin".hasAtLeastFiveChars()) // 改成判断一个你喜欢的单词
去 Kotlin Playground 动手 ↗提示:Android 专属示例需要 Android Studio 项目和对应依赖;普通 Kotlin 示例可在 Playground 中尝试。
三道小测
先自己选择,再展开答案。答错也没关系,重要的是知道为什么。
1. 扩展函数会直接修改原类源码吗?
查看答案与解析
正确答案:B。抓住题目中的核心概念,重新对照示例理解。
2. 扩展函数通常如何调用?
查看答案与解析
正确答案:A。回到概念和代码示例,再解释一次为什么。
3. 手机号正则能否证明号码真实有效?
查看答案与解析
正确答案:B。抓住题目中的核心概念,重新对照示例理解。
深入阅读
想继续往下挖,可以阅读 Kotlin / Android 官方文档。
打开官方文档 ↗标记学习进度
进度保存在当前浏览器的 localStorage 中。