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”,随后我们将该变量分配给了一个数字变量。这是可能的,因为"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
    com.test.www.genericsExample@1324409e
    com.test.www.genericsExample@2c6a3f77