先用人话理解
泛型用类型参数表示“这里的类型稍后再决定”。这样可以复用代码,同时保留编译器的类型检查,少写危险的强制转换。
本课要点:T 是类型参数的常见命名。out 常用于“只生产/提供 T”,in 常用于“消费/接收 T”。先理解方向即可。
代码例子
先读注释,再关注每一行如何把数据变成结果。
KOTLIN · 可独立运行
fun <T> firstOrNull(items: List<T>): T? = items.firstOrNull() // 空列表返回 null
class Box<T>(val value: T) { // 创建时决定盒子装什么类型
fun open(): T = value
}
fun main() {
println(firstOrNull(listOf("茶", "咖啡"))) // 茶
println(firstOrNull(listOf(3, 5, 8))) // 3
println(firstOrNull(emptyList<String>())) // null
val snackBox = Box("饼干")
val numberBox = Box(42)
println(snackBox.open())
println(numberBox.open())
}再看一个用法
KOTLIN · 可独立运行
class Box<T>(val value: T)
fun main() {
val textBox = Box("可以放文字")
val numberBox = Box(2026)
println(textBox.value)
println(numberBox.value)
}动手改一改
class Box<T>(val value: T) val box = Box("把我换成数字或其他文字") println(box.value) // 尝试更换 Box 里的类型
去 Kotlin Playground 动手 ↗提示:Android 专属示例需要 Android Studio 项目和对应依赖;普通 Kotlin 示例可在 Playground 中尝试。
三道小测
先自己选择,再展开答案。答错也没关系,重要的是知道为什么。
1. 泛型最主要的好处是什么?
查看答案与解析
正确答案:A。回到概念和代码示例,再解释一次为什么。
2. Box<T> 中的 T 是什么?
查看答案与解析
正确答案:B。抓住题目中的核心概念,重新对照示例理解。
3. out T 常见表达哪种方向?
查看答案与解析
正确答案:A。回到概念和代码示例,再解释一次为什么。
深入阅读
想继续往下挖,可以阅读 Kotlin / Android 官方文档。
打开官方文档 ↗标记学习进度
进度保存在当前浏览器的 localStorage 中。