Kotlin学习笔记(5)--泛型

泛型

泛型允许我们编写可重用且类型安全的代码,适用于各种数据类型。

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)
    val strings = listOf("apple", "banana", "cherry")

    println(countElements(numbers) { it > 2 }) // 输出 3
    println(countElements(strings) { it.length > 5 }) // 输出 2
}

fun <T> countElements(list: List<T>, condition: (T) -> Boolean): Int {
    var count = 0
    for (item in list) {
        if (condition(item)) {
            count++
        }
    }
    return count
}

协变与逆变:

  • 协变(Covariance):协变允许我们使用更具体的类型来替代泛型类型中的类型参数。换句话说,如果 Cat 是 Animal 的子类,那么 Producer<Cat> 也是 Producer<Animal> 的子类。
    • 使用 out 关键字,可以让泛型类在子类中保留类型参数的协变性。
  • 逆变(Contravariance):逆变允许我们使用更泛化的类型来替代泛型类型中的类型参数。也就是说,如果 Animal 是 Cat 的父类,那么 Consumer<Animal>Consumer<Cat> 的子类。
    • 使用 in 关键字,可以让泛型类在子类中保留类型参数的逆变性。
// 协变示例
interface Producer<out T> {
    fun produce(): T
}

// 逆变示例
interface Consumer<in T> {
    fun consume(item: T)
}
posted @ 2024-10-19 19:20  Jacob-Chen  阅读(13)  评论(0)    收藏  举报