提示信息

Kotlin 泛型

最近我没食欲 已关注

Kotlin 中的泛型允许你编写更加通用和可重用的代码。通过使用泛型,你可以创建一个可以与任何类型一起使用的类、接口或函数,而无需在每个需要使用不同类型的情况下重新定义代码。

以下是 Kotlin 泛型的一些关键概念和用法:

泛型类和接口

你可以为类或接口定义一个或多个类型参数。类型参数用尖括号尖括号 (<T>) 来表示:

  1. class Box<T>(var content: T)
  2. fun main() {
  3. val intBox = Box(1)
  4. val stringBox = Box("Hello")
  5. println(intBox.content) // 输出: 1
  6. println(stringBox.content) // 输出: Hello
  7. }

泛型函数

函数也可以使用泛型参数,从而使其适用于多个类型:

  1. fun <T> printItem(item: T) {
  2. println(item)
  3. }
  4. fun main() {
  5. printItem(123) // 输出: 123
  6. printItem("Hello") // 输出: Hello
  7. }

泛型约束

有时候,你可能需要约束泛型类型,以确保它具备某些特定的性质或提供特定的方法。Kotlin 支持通过 where 关键字指定泛型约束:

  1. fun <T : Comparable<T>> sort(list: List<T>) {
  2. // 在这里,"T" 可以是任何实现了 Comparable<T> 接口的类型
  3. }
  4. fun main() {
  5. sort(listOf(3, 1, 2)) // 可以排序 Int 类型
  6. }

型变(Variance)

Kotlin 中有型变修饰符 outin,用于指定泛型类型参数的型变行为,以在子类型化的复杂情况下提供更灵活的 API。

  • 协变 (Covariance): 使用 out 关键字,意味着可以使用该泛型类型的子类型。当你只从类中获取内容,你可以使用协变。
  1. interface Source<out T> {
  2. fun nextT(): T
  3. }
  • 逆变 (Contravariance): 使用 in 关键字,意味着可以使用该泛型类型的超类型。当你只将信息传入类时,可以使用逆变。
  1. interface Comparable<in T> {
  2. fun compareTo(other: T): Int
  3. }

类型投影(Type Projection)则提供了一种手动的替代型变的手段,允许你明确控制哪些函数参数是协变或逆变的。

通过使用 Kotlin 泛型,你可以编写更为灵活和通用的代码,同时还能保证类型安全性。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
最近我没食欲 关注 已关注

最近一次登录:2024-11-19 21:54:48   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图