📅  最后修改于: 2023-12-03 15:17:10.066000             🧑  作者: Mango
在 Kotlin 中,泛型允许我们编写更加通用的代码,以便在不同的情况下重复使用。泛型可用于函数、类和接口中。
要定义一个泛型函数或类,请在函数名(或类名)的后面添加尖括号,并用一个大写字母表示泛型参数的名称:
fun <T> genericFunction(arg1: T): T {
return arg1
}
class MyGenericClass<T>(arg1: T) {
val value: T = arg1
}
在这个例子中,T 表示泛型参数的名称。泛型函数 genericFunction 接受一个类型是 T 的参数 arg1,并返回一个相同类型的参数。
泛型类 MyGenericClass 接受一个类型是 T 的构造函数参数 arg1,并定义了一个 value 属性来存储该参数。
若要使用泛型代码,则需要为其指定正确的类型参数:
val intValue = genericFunction<Int>(42)
val stringValue = genericFunction<String>("Hello, World!")
val myIntClass = MyGenericClass<Int>(1)
val myStringClass = MyGenericClass<String>("Hello")
在这个例子中,我们调用了泛型函数 genericFunction,并为 T 指定了 Int 和 String 类型的参数。我们还实例化了 MyGenericClass 类,并为其 T 参数指定了 Int 和 String 类型。
在 Kotlin 中,可以为泛型参数指定上限和下限。上限和下限可以帮助我们限制泛型参数的类型。
对于类型 T 的上限,我们可以使用 out 关键字,将泛型参数类型限制为指定类型和该类型的子类型:
interface List<out T> {
fun get(index: Int): T
}
在这个例子中,List 接口的泛型参数类型被限制为 T 类型及其子类型。这意味着我们可以将 List
对于类型 T 的下限,我们可以使用 in 关键字,将泛型参数类型限制为指定类型及其超类型:
interface Comparable<in T> {
operator fun compareTo(other: T): Int
}
在这个例子中,Comparable 接口的泛型参数类型被限制为 T 类型及其超类型。这意味着我们可以将 Comparable
在泛型中,我们通常将函数或类定义为“消费者”或“生产者”。
在 Kotlin 中,我们可以使用 out 和 in 关键字来标记泛型类型的“生产者”和“消费者”。out 关键字标记类型为“生产者”,而 in 关键字标记类型为“消费者”。
Kotlin 的泛型功能让我们可以编写更加通用的代码,以便在不同的情况下重复使用。泛型可用于函数、类和接口中。我们可以为泛型参数指定上限和下限,以便限制泛型参数的类型。我们可以将泛型类型标记为“生产者”或“消费者”,并使用 out 和 in 关键字。