rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • Extension Function(扩展函数)

  • 2. 扩展函数(Extension Function)
    • 核心定义
    • 关键特征
    • 使用场景
    • 示例
    • 注意事项

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(无法直接添加字段)。
最近更新:: 2026/3/22 16:04
Contributors: luokaiwen