Kotlin 面试题
目录

Kotlin 中泛型类 (Generic Class) 的用法?

· 约 3 分钟读完 · 第 100 / 200 章

推荐答案

在 Kotlin 中,泛型类允许你定义可以处理任意类型数据的类。通过使用泛型,你可以编写更加通用和可重用的代码。以下是一个简单的泛型类的示例:

在这个例子中,Box 是一个泛型类,T 是类型参数。你可以用任何类型来实例化 Box 类,比如 Int、String 等。

本题详细解读

泛型类的基本概念

泛型类是一种可以接受类型参数的类。类型参数在类定义时指定,并在实例化时确定具体的类型。这使得类可以处理不同类型的数据,而不需要为每种类型编写单独的类。

泛型类的定义

在 Kotlin 中,泛型类的定义方式如下:

  • T 是类型参数,可以是任何类型。
  • 在实例化时,你可以指定具体的类型,例如 ClassName<Int> 或 ClassName<String>。

泛型类的使用

泛型类可以用于多种场景,例如:

  1. 容器类:如 Box、List 等,可以存储任意类型的元素。
  2. 工具类:如 Comparator、Predicate 等,可以处理任意类型的数据。
  3. 数据类:如 Pair、Triple 等,可以组合不同类型的数据。

泛型类的约束

有时你可能希望对泛型类的类型参数进行约束,以确保它满足某些条件。Kotlin 提供了 where 关键字来实现这一点:

在这个例子中,T 必须实现 Comparable 接口。

泛型类的类型擦除

Kotlin 的泛型在运行时会被擦除,这意味着在运行时无法获取泛型类型的具体信息。例如,Box<Int> 和 Box<String> 在运行时都会被当作 Box<*> 处理。

泛型类的协变与逆变

Kotlin 支持泛型的协变和逆变,分别通过 out 和 in 关键字来实现:

  • 协变:out 关键字表示类型参数只能作为输出(返回值),不能作为输入(参数)。
  • 逆变:in 关键字表示类型参数只能作为输入(参数),不能作为输出(返回值)。

泛型类的实际应用

泛型类在实际开发中非常有用,特别是在编写通用库或框架时。通过使用泛型,你可以减少代码重复,提高代码的可读性和可维护性。