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 特性

第 8 章:泛型

8.1 泛型函数与泛型类

泛型的概念

泛型(Generics)是 Kotlin 中一种强大的特性,允许在定义类、接口或函数时使用类型参数,从而提高代码的复用性和类型安全性。通过泛型,可以编写出更加灵活且类型安全的代码。

泛型类

泛型类是指类或接口中使用了类型参数的类。定义泛型类时,需要在类名后添加尖括号 <T>,其中 T 是类型参数的占位符。

class Box<T>(t: T) {
    var value = t
}

fun main() {
    val intBox = Box<Int>(10)       // 明确指定类型为 Int
    val stringBox = Box("Hello")    // 类型推断为 String
    println(intBox.value)           // 输出: 10
    println(stringBox.value)        // 输出: Hello
}

在上面的例子中,Box 是一个泛型类,可以存储任意类型的值。创建实例时,可以显式指定类型参数,也可以让编译器通过传入的参数自动推断类型。

泛型函数

泛型函数是指函数中使用类型参数的函数。定义泛型函数时,需要在函数名之前添加 <T>。

fun <T> singletonList(item: T): List<T> {
    return listOf(item)
}

fun main() {
    val list1 = singletonList<Int>(42)      // 显式指定类型
    val list2 = singletonList("Kotlin")     // 类型推断为 String
    println(list1)                         // 输出: [42]
    println(list2)                         // 输出: [Kotlin]
}

泛型约束

有时需要对泛型的类型参数进行限制,确保它满足某些条件。可以通过 where 子句或直接指定上界来实现。

fun <T : Comparable<T>> maxOf(a: T, b: T): T {
    return if (a > b) a else b
}

fun main() {
    println(maxOf(10, 20))          // 输出: 20
    println(maxOf("A", "B"))        // 输出: B
}

在上面的例子中,T 必须是实现了 Comparable<T> 接口的类型,因此可以调用 > 操作符进行比较。

泛型的优势

  1. 类型安全:编译器会在编译时检查类型,避免运行时类型转换错误。
  2. 代码复用:可以编写通用的逻辑,适用于多种类型。
  3. 减少强制类型转换:泛型可以减少显式的类型转换代码。

总结

泛型是 Kotlin 中非常重要的特性,能够显著提升代码的灵活性和安全性。通过泛型类和泛型函数,可以编写出更加通用且类型安全的代码。在后续章节中,我们将进一步探讨泛型的其他高级特性,如类型擦除、协变和逆变等。

Last Updated:: 5/21/25, 7:58 PM