【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
可以將「泛型」比喻成寶可夢中的百變怪。它允許你撰寫可以適用於多種資料類型的程式碼,而不需要重複寫多個相似的函數或類別。當你需要處理不同類型的參數,不論是類別或方法,以及各種資料型態時,泛型就能派上用場。
class Box<T>(item: T) {
var content: T = item
}
fun main() {
// 創建一個裝著整數的箱子
val intBox = Box(10)
println("整數箱子中的內容:${intBox.content}")
// 創建一個裝著字串的箱子
val stringBox = Box("Kotlin 泛型")
println("字串箱子中的內容:${stringBox.content}")
}
在這個範例中,假設我們有一個箱子 Box
,想要將不同類型,如:整數和字串放進去。在這裡,我們可以使用泛型<T>
來建立一個通用的箱子類別。接著,我們可以創建不同類型的箱子,分別存放整數和字串。
fun <T> displayItem(item: T) {
println("你傳遞了這個物件:$item")
}
fun main() {
displayItem(10)
displayItem("Kotlin 泛型")
}
在這個範例中,我們示範泛型應用在函數中。displayItem
函式使用了泛型 <T>
,可以接受任何類型的參數。透過 displayItem(10)
和 displayItem("Kotlin 泛型")
我們可以傳遞不同類型的物件給這個函數。
有時候,我們希望泛型只能接受特定類型的物件。在 Kotlin 中,可以使用泛型的上限限制來達成這個目的。例如:
open class Animal {
fun sound() {
println("動物發出聲音")
}
}
class Dog : Animal() {
override fun sound() {
println("汪汪!")
}
}
class Cat : Animal() {
override fun sound() {
println("喵喵!")
}
}
fun <T : Animal> makeSound(animal: T) {
animal.sound()
}
fun main() {
val dog = Dog()
val cat = Cat()
makeSound(dog) // 印出 "汪汪!"
makeSound(cat) // 印出 "喵喵!"
}
在這個範例中,makeSound
函式使用了泛型 <T : Animal>
,表示泛型 T
必須是 Animal
或其子類別。這樣我們就可以確保只能傳遞動物類型的物件給這個函式。