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
广告