【Kotlin 入門指南】委托類別 (Delegation)

閱讀時間約 2 分鐘
【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q

委托類別

當需要使用某個父類別的功能,但不想自行實作時,Kotlin 程式語言中,提供了一種原生的語法支持,讓我們可以很容易地使用委托類別。我們只需要在類別的宣告中使用 by 關鍵字,就可以指定一個委托對象,然後編譯器會自動幫我們生成所有需要委托的方法和屬性。

委托類別範例

interface Base {
val msg: String
fun print()
}

class BaseImpl(private val data: Int) : Base {
override val msg = "BaseImpl: data = $data"
override fun print() { println(msg) }
}

//衍生出來的新類別
class MyFunction(b: Base) : Base by b {
override val msg = "MyFunction: 覆寫資料"
}

fun main() {
val b = BaseImpl(10)
val myFunction = MyFunction(b)
myFunction.print() //BaseImpl: data = 10
println(myFunction.msg) //MyFunction: 覆寫資料
}

在這個範例中,想像有一個 Base 的設計,有個 msg 屬性和 print 方法。有個 BaseImpl 類別實現了 Base,提供了 msg 屬性和 print 方法的具體內容。要注意的是,msg 值是根據傳入的 data 參數動態生成的。

現在,假設我們想建立一個叫 MyFunction 的新類別,不想從頭實作 Base,而是希望透過其他類別處理 Base 的功能。在 Kotlin 裡,可以用 by 這個關鍵字來做這種委託。在 MyFunction 類別中,用了 by b 的寫法,代表 MyFunction 的行為會委託給 b 所指的物件。這意味著當我們呼叫 MyFunction 的 print 方法時,它會委託給 b 所指的物件,然後執行 Base 的 print 方法。

此外,在 MyFunction 中,我們也可以改寫被委託的屬性。例如,我們改寫了 msg 屬性並給了新的值。這展示了委託的彈性,讓我們在需要時修改或擴充委託屬性的行為。

Kotlin 的委託類別提供了一個靈活又強大的機制,讓程式設計師更有效率地重複使用程式碼,並支援類別之間的互動。透過 by 這個關鍵字,我們能輕鬆實現委託屬性,並在需要時修改屬性的內容。

8會員
220內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...