Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第二部分:面向对象编程与 Kotlin 特性

第二部分:面向对象编程与 Kotlin 特性

第7章:单例与伴生对象

7.3 扩展伴生对象

1. 什么是扩展伴生对象?

Kotlin 允许通过扩展函数为伴生对象(companion object)添加新的功能,即使原始类或伴生对象的定义不可修改。这种机制称为扩展伴生对象。

2. 语法与实现

扩展伴生对象的语法与普通扩展函数类似,但需通过类名直接访问伴生对象:

class MyClass {
    companion object {
        fun existingMethod() = println("Existing method")
    }
}

// 扩展伴生对象
fun MyClass.Companion.newMethod() {
    println("Extended method")
}

// 调用
MyClass.newMethod() // 输出: Extended method

3. 使用场景

  • 增强工具类功能:为已有类的伴生对象添加工具方法。
  • 第三方库扩展:在不修改源码的情况下为库中的类添加静态方法。
  • DSL 支持:结合运算符重载实现领域特定语言。

4. 注意事项

  • 扩展函数是静态解析的,无法访问伴生对象的私有成员。
  • 若伴生对象未显式命名,默认名为 Companion(如 MyClass.Companion)。
  • 扩展函数优先级低于伴生对象原有的成员函数。

5. 示例:为 String 的伴生对象添加扩展

fun String.Companion.generateRandom(length: Int): String {
    val chars = ('a'..'z') + ('A'..'Z') + ('0'..'9')
    return (1..length).map { chars.random() }.joinToString("")
}

// 调用
val randomStr = String.generateRandom(10)
println(randomStr) // 输出类似: "aB3x7pL2qK"

6. 与 Java 互操作性

在 Java 中调用扩展伴生对象时,需通过生成的静态方法访问:

// Java 中调用
MyClass.Companion.newMethod(); // 需传入 Companion 实例(不推荐)
// 更推荐在 Kotlin 中封装为顶层函数

关键点总结

  • 扩展伴生对象通过 ClassName.Companion.func() 语法实现。
  • 适用于无侵入式扩展工具方法,提升代码可维护性。
  • 需注意扩展函数的静态解析特性与访问权限限制。
Last Updated:: 5/21/25, 7:58 PM