Extension Function(扩展函数)
2. 扩展函数(Extension Function)
核心定义
在不修改原有类源码的前提下,为该类添加新的成员函数,本质是静态方法的语法糖(JVM 层面)。
关键特征
- 语法:
fun 接收者类型.函数名(参数): 返回值 { ... }; - 可访问接收者的公有成员(属性 / 方法),但不能访问私有 / 保护成员;
- 扩展函数不会真正修改原有类,仅在编译期将接收者作为第一个参数传入函数。
使用场景
- 为第三方类(如 Java 的 String、List,Android 的 Context)添加便捷方法;
- 避免创建大量工具类(如
StringUtils),让方法调用更符合面向对象风格; - 拆分复杂类的方法,提升代码可读性。
示例
// 示例1:为String扩展空值判断方法
fun String?.isNullOrEmptyOrBlank(): Boolean {
return this == null || this.isEmpty() || this.isBlank()
}
// 示例2:为List<Int>扩展求和方法
fun List<Int>.sum(): Int {
var total = 0
this.forEach { total += it }
return total
}
// 使用
fun main() {
println("".isNullOrEmptyOrBlank()) // true
println(null.isNullOrEmptyOrBlank()) // true
val list = listOf(1, 2, 3, 4)
println(list.sum()) // 10
}
注意事项
- 扩展函数若与原有类的成员函数重名,调用时优先执行成员函数;
- 扩展属性需手动实现 getter/setter(无法直接添加字段)。