泛型
泛型类/函数、型变 out/in、where 约束、reified 实化
泛型
Kotlin 泛型支持型变(out/in)和实化类型参数(reified)。
学完本章你将: 掌握泛型类/函数、out 协变/in 逆变、reified。
泛型类与函数
kotlin
class Box<T>(val item: T)
fun <T> singletonList(item: T): List<T> = listOf(item)
val box = Box(42) // Box<Int>
val list = singletonList("A") // List<String>
out 协变(生产者)
kotlin
// out = 只能读取(生产者)——子类可替代父类
interface Source<out T> {
fun next(): T
}
fun demo(src: Source<String>) {
val ref: Source<Any> = src // ✅ String 可替代 Any
}
in 逆变(消费者)
kotlin
// in = 只能写入(消费者)——父类可替代子类
interface Sink<in T> {
fun put(item: T)
}
fun demo(sink: Sink<Any>) {
val ref: Sink<String> = sink // ✅ Any 可替代 String
}
where 约束
kotlin
fun <T> copyWhenGreater(list: List<T>, threshold: T): List<T>
where T : CharSequence, // 必须同时满足
T : Comparable<T> {
return list.filter { it > threshold }
}
reified 实化类型参数
kotlin
// inline + reified = 运行时保留泛型信息
inline fun <reified T> isType(value: Any): Boolean {
return value is T // ✅ 普通泛型不能这样用
}
println(isType<String>("Hello")) // true
println(isType<Int>(42)) // true