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)
}

浙公网安备 33010602011771号