Z
ZHANK
编程在线教程Kotlin 教程扩展函数与属性
函数

扩展函数与属性

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"——按声明类型解析
// 扩展函数不是多态的——取决于编译期类型