Kotlin - 泛型


与 Java 一样,Kotlin 提供了更高阶的变量类型,称为泛型。在本章中,我们将学习 Kotlin 如何实现泛型,以及作为开发人员如何使用泛型库中提供的这些功能。在实现方面,泛型与 Java 非常相似,但 Kotlin 开发人员引入了两个新关键字“out”“in”,以使 Kotlin 代码对开发人员来说更具可读性和易用性。

在 Kotlin 中,类和类型是完全不同的概念。根据示例,List 是 Kotlin 中的类,而 List<String> 是 Kotlin 中的类型。以下示例描述了如何在 Kotlin 中实现泛型。

fun main(args: Array<String>) {
   val integer: Int = 1
   val number: Number = integer
   print(number)
}

在上面的代码中,我们声明了一个“整数”,然后我们将该变量分配给一个数字变量。这是可能的,因为“Int”是 Number 类的子类,因此类型转换在运行时自动发生并产生输出“1”。

让我们进一步了解 Kotlin 中的泛型。每当我们不确定要在应用程序中使用的数据类型时,最好选择通用数据类型。一般来说,Kotlin 中的泛型由<T>定义,其中“T”代表模板,可以由 Kotlin 编译器动态确定。在下面的示例中,我们将了解如何在 Kotlin 编程语言中使用通用数据类型。

fun main(args: Array<String>) {
   var objet = genericsExample<String>("JAVA")
   var objet1 = genericsExample<Int>(10)
}
class genericsExample<T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

在上面的代码中,我们创建了一个具有通用返回类型的类,该类表示为<T>。看一下 main 方法,我们在运行时通过证明值类型动态定义了它的值,同时创建了此类的对象。这就是 Kotlin 编译器解释泛型的方式。一旦我们在编码环境中运行此代码,我们将在浏览器中获得以下输出。

I am getting called with the value JAVA
I am getting called with the value 10

当我们想要将泛型类型分配给它的任何超类型时,我们需要使用“out”关键字,而当我们想要将泛型类型分配给它的任何子类型时,我们需要使用“in”关键词。在下面的示例中,我们将使用“out”关键字。同样,您可以尝试使用“in”关键字。

fun main(args: Array<String>) {
   var objet1 = genericsExample<Int>(10)
   var object2 = genericsExample<Double>(10.00)
   println(objet1)
   println(object2)
}
class genericsExample<out T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

上面的代码将在浏览器中产生以下输出。

I am getting called with the value 10
I am getting called with the value 10.0
genericsExample@28d93b30
genericsExample@1b6d3586