【Kotlin 入門指南】泛型 (Generics)

更新於 發佈於 閱讀時間約 4 分鐘
【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 或其子類別。這樣我們就可以確保只能傳遞動物類型的物件給這個函式。


avatar-img
13會員
259內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~