【Kotlin 入門指南】委托屬性 (Delegated properties)

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

委托屬性

在 Kotlin 程式語言中,委託屬性是指把一個屬性的 get 和 set 操作委託給其他物件來實現。這種委託可以透過 by 關鍵字來實現。當你使用委託屬性時,實際的 get 和 set 操作將被委託給指定的物件,減少了重複的程式碼,提高了程式碼的可維護性和可擴展性。

委托屬性範例

在這個範例中,我們先建立一個 Logger 物件,讓它實現 PropertyDelegate 介面的方法:

class Logger : PropertyDelegate {
private var value: String = "Initial Value"

override fun getValue(): String {
println("讀取屬性值:$value")
return value
}

override fun setValue(value: String) {
println("設定屬性值:$value")
this.value = value
}
}

接著,我們建立一個 ExampleClass 物件,並使用 Logger 物件來委託屬性的存取行為:

 class ExampleClass(delegate: PropertyDelegate) {
var delegatedProperty: String by delegate
}

main 函式中,我們建立了一個 Logger 物件並將其傳遞給 ExampleClass 的建構子,這樣 delegatedProperty 屬性就能夠使用 Logger 物件來委託其存取行為了。

當我們設定 delegatedProperty 屬性時,會觸發 Logger 物件的 setValue 方法,同時在控制台輸出設定的值。當讀取 delegatedProperty 屬性時,會觸發 Logger 物件的 getValue 方法,同時在控制台輸出該屬性的值。

這樣就可以透過委託屬性,使用 Logger 物件來記錄屬性的存取行為,讓程式碼更具可控性和可讀性。


fun main() {
val logger = Logger()
val example = ExampleClass(logger)

example.delegatedProperty = "New Value" // 設定屬性值:New Value
val value = example.delegatedProperty // 讀取屬性值:New Value
}

委託屬性的好處

  1. 程式碼重用性: 委託屬性可以幫助我們避免重複編寫相似的屬性存取邏輯,提高了程式碼的重用性和模組化。
  2. 可讀性和維護性: 透過委託屬性,我們可以將屬性的實際邏輯隱藏起來,使程式碼更易於理解和維護。
  3. 靈活性: 可以隨時更換委託物件,以達到不同的行為效果,而不需要修改原始類別的程式碼。

委託屬性的應用場景

  1. 延遲初始化: 通過委託屬性可以實現屬性的延遲初始化,僅在需要的時候才進行實際的初始化操作。
  2. 觀察者模式: 可以使用委託屬性實現觀察者模式,監聽屬性變化並執行相應的操作。
  3. 單一職責原則: 將某些特定行為委託給其他物件,符合單一職責原則,使類別更專注於自身的功能。
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歲的年齡...