Kotlin 面试题
目录

Kotlin 中类型投影 (Type Projections) 的用法?

· 约 2 分钟读完 · 第 105 / 200 章

推荐答案

在 Kotlin 中,类型投影(Type Projections)用于限制泛型类型的可变性。通过类型投影,可以指定泛型类型是只读的(out)或只写的(in),从而在编译时提供更严格的类型检查。

示例代码

在这个例子中,from 参数使用了 out 投影,表示 from 是一个只读的 Box,而 to 参数使用了 in 投影,表示 to 是一个只写的 Box。

本题详细解读

类型投影的作用

类型投影的主要作用是限制泛型类型的可变性,从而在编译时提供更严格的类型检查。通过使用 out 和 in 关键字,可以明确指定泛型类型是只读的还是只写的。

  • out 投影:表示类型是只读的,即只能从该类型中读取数据,不能写入数据。通常用于生产者(Producer)场景。
  • in 投影:表示类型是只写的,即只能向该类型中写入数据,不能读取数据。通常用于消费者(Consumer)场景。

类型投影的使用场景

  1. 生产者场景:当你有一个泛型类或函数,它只负责生产数据(即只读取数据),可以使用 out 投影。例如,List<out T> 表示这个列表是只读的,不能向其中添加元素。

  2. 消费者场景:当你有一个泛型类或函数,它只负责消费数据(即只写入数据),可以使用 in 投影。例如,MutableList<in T> 表示这个列表是只写的,可以向其中添加元素,但不能读取元素。

类型投影的注意事项

  • 类型投影不能同时使用 out 和 in,因为它们的作用是互斥的。
  • 类型投影可以用于函数参数、返回值以及类属性等场景。
  • 类型投影可以帮助你在编译时捕获潜在的类型错误,从而提高代码的安全性。

通过合理使用类型投影,可以在 Kotlin 中编写更加安全和灵活的泛型代码。