扩展函数与属性
fun Type.method() 扩展、扩展属性、扩展的静态解析
扩展函数与属性
扩展让你在不修改源码的情况下给类添加新方法——Kotlin 的杀手级特性。
学完本章你将: 掌握扩展函数、扩展属性、静态解析。
扩展函数
kotlin
// 给 String 添加新方法
fun String.removeFirstLast(): String {
return this.substring(1, length - 1)
}
println("Hello".removeFirstLast()) // "ell"
// 不需要 this
fun String.isLong() = length > 10
泛型扩展
kotlin
fun <T> List<T>.secondOrNull(): T? {
return if (size >= 2) this[1] else null
}
val list = listOf(1, 2, 3)
println(list.secondOrNull()) // 2
扩展属性
kotlin
val String.wordCount: Int
get() = split("\\s+".toRegex()).size
println("Hello Kotlin World".wordCount) // 3
可空接收者
kotlin
fun String?.isNullOrBlank(): Boolean {
return this == null || this.isBlank()
}
val s: String? = null
println(s.isNullOrBlank()) // true——不需要 ?.
重要:静态解析
kotlin
open class Parent
class Child : Parent()
fun Parent.greet() = "Parent"
fun Child.greet() = "Child"
val obj: Parent = Child()
println(obj.greet()) // "Parent"——按声明类型解析
// 扩展函数不是多态的——取决于编译期类型