📜  Kotlin-泛型

📅  最后修改于: 2020-12-30 07:05:01             🧑  作者: Mango


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

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

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

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

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

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

在上面的代码中,我们正在创建一个具有通用返回类型的类,该类表示为 。看一下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) {
   var objet1 = genericsExample(10)
   var object2 = genericsExample(10.00)
   println(objet1)
   println(object2)
}
class genericsExample(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