Kotlin学习笔记 泛型

在 Kotlin 中,`T` 通常用作类型参数的占位符,它在实例化或传递参数时会被替换成具体的类型。

Kotlin 支持泛型,这意味着您可以编写可以与多种数据类型一起工作的代码,而不必为每种数据类型编写单独的代码。

泛型类和函数

在 Kotlin 中,创建泛型类和函数,如下所示:

```kotlin

// 泛型类

class Box<T>(var value: T)

// 泛型函数

fun <T> singletonList(item: T): List<T> {

// ...

}

```

泛型约束

对泛型类型参数施加约束,以限制它们可以接受的类型。例如,可以指定一个上界,表示类型参数必须是特定类型或其子类型:

```kotlin

// 泛型函数,T 必须是 Comparable 的子类型

fun <T : Comparable<T>> sort(list: List<T>) {

// ...

}

```

类型投影

Kotlin 还支持类型投影,这允许在不知道具体类型的情况下安全地使用泛型类型。类型投影包括 `out` 投影(协变)和 `in` 投影(逆变),以及星号投影(`*`),后者允许在不知道具体类型的情况下读取或写入类型参数:

```kotlin

// 协变投影

val listOut: List<*> = arrayListOf("apple", "banana")

// 逆变投影

val listIn: List<out Apple> = arrayListOf(Apple(), Orange())

// 星号投影

val listStar: List<*> = arrayListOf(1, 2, 3)

```

泛型的使用

在使用泛型时,应该注意类型擦除的概念。在编译后的字节码中,泛型类型参数的具体类型信息会被擦除,这意味着在运行时无法得知泛型参数的实际类型。因此,在某些情况下,可能需要使用类型检查和转换来确保类型安全。

相关推荐
学长毕设1 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
小小de风呀5 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程5 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt6 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
程序员清风7 小时前
算法题中的边界条件、测试与调试
开发语言·算法·kotlin
小宋10217 小时前
用户点踩后怎么变成回归用例:请求快照、反馈聚类与复现率验收
人工智能·回归·kotlin·聚类
~kiss~8 小时前
PRO-LONG: Programmatic Memory Enables Long-Horizon Reasoning 程序式记忆赋能长程推理
学习
程序猿编码8 小时前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
ms72wx9 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
传奇开心果编程9 小时前
Compose Multiplatform 共享边界实战:架构契约、互操作同步与可回退设计
kotlin·移动开发·跨平台·cmp·编程语言理论·编程框架·声明式ui