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