Kotlin 面试题
目录

Kotlin 中什么是泛型 (Generics)?

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

推荐答案

在 Kotlin 中,泛型(Generics)是一种允许类、接口和方法在定义时使用类型参数的机制。通过泛型,可以编写更加通用和类型安全的代码,避免类型转换的麻烦,并在编译时捕获类型错误。

例如,Kotlin 中的 List<T> 是一个泛型类,T 是类型参数。你可以创建一个 List<String> 来存储字符串,或者创建一个 List<Int> 来存储整数,而不需要为每种类型单独编写一个类。

本题详细解读

1. 泛型的基本概念

泛型允许你在定义类、接口或方法时使用类型参数,这些类型参数在实例化或调用时被具体的类型替换。通过这种方式,泛型使得代码更加通用和可重用。

2. 泛型类

在 Kotlin 中,你可以定义一个泛型类,如下所示:

在这个例子中,Box 是一个泛型类,T 是类型参数。你可以使用不同的类型来实例化 Box:

3. 泛型函数

除了泛型类,Kotlin 还支持泛型函数。泛型函数允许你在函数定义中使用类型参数:

你可以用不同的类型调用这个函数:

4. 泛型约束

Kotlin 允许你对泛型类型参数进行约束,以确保它们满足某些条件。例如,你可以限制类型参数必须是某个类的子类:

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

5. 类型擦除

Kotlin 的泛型在运行时是类型擦除的,这意味着泛型类型信息在运行时不可用。例如,List<String> 和 List<Int> 在运行时都是 List<*>。

6. 泛型的协变与逆变

Kotlin 支持泛型的协变(out)和逆变(in)。协变允许你使用更具体的类型,而逆变允许你使用更通用的类型。

在这个例子中,Producer 是协变的,Consumer 是逆变的。

7. 星号投影

Kotlin 提供了星号投影(*)来表示未知类型的泛型。例如,List<*> 表示一个包含未知类型元素的列表。

星号投影在处理不确定类型的泛型时非常有用。