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

更新 發佈閱讀 4 分鐘
【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. 單一職責原則: 將某些特定行為委託給其他物件,符合單一職責原則,使類別更專注於自身的功能。
留言
avatar-img
HKT實驗室
32會員
287內容數
哈囉!我是 HKT,一位專注於 AI 領域、熱愛 Vibe Coding 技術的開發者。在這個專屬的部落格空間,我將與你分享我在 AI 應用開發領域中的深入學習心得與實戰經驗。如果你也對 AI 技術充滿好奇,渴望不斷探索 AI 的無限可能,歡迎加入會員,與我一起踏上 AI 之旅,挖掘更深層的技術世界,享受學習的樂趣!
HKT實驗室的其他內容
2023/12/15
本文介紹 Kotlin 中的延遲初始化(lateinit)和懶加載(lazy)的使用方法,以及它們之間的差異。這些關鍵字能夠提升程式效能並簡化程式碼撰寫。
Thumbnail
2023/12/15
本文介紹 Kotlin 中的延遲初始化(lateinit)和懶加載(lazy)的使用方法,以及它們之間的差異。這些關鍵字能夠提升程式效能並簡化程式碼撰寫。
Thumbnail
2023/12/11
空值例外是開發中一個常見的風險,特別是在 Kotlin 和 Java 這樣的跨平台開發中更容易出現。藉由合理地運用 Kotlin 的空值安全機制以及對 Java 程式碼的註解,可以有效地降低程式錯誤的風險,提高程式碼的可靠性和穩定性。
Thumbnail
2023/12/11
空值例外是開發中一個常見的風險,特別是在 Kotlin 和 Java 這樣的跨平台開發中更容易出現。藉由合理地運用 Kotlin 的空值安全機制以及對 Java 程式碼的註解,可以有效地降低程式錯誤的風險,提高程式碼的可靠性和穩定性。
Thumbnail
2023/12/11
在 IntelliJ IDEA 建立 Kotlin 專案時,要執行 Java 程式只需將其檔案命名為 .java,並放置在專案的 java 目錄中。這樣就可以順利執行該 Java 程式。
Thumbnail
2023/12/11
在 IntelliJ IDEA 建立 Kotlin 專案時,要執行 Java 程式只需將其檔案命名為 .java,並放置在專案的 java 目錄中。這樣就可以順利執行該 Java 程式。
Thumbnail
看更多
你可能也想看
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
Kotlin 的函式可以作為參數使用,它們被歸類為一種資料型別,稱為「Function Types」。當 Java 呼叫這種型別的 Kotlin 函式時,會使用 invoke 關鍵字進行呼叫。通過反編譯程式碼,可以得知 Kotlin 中的 Function Types 資訊。
Thumbnail
Kotlin 的函式可以作為參數使用,它們被歸類為一種資料型別,稱為「Function Types」。當 Java 呼叫這種型別的 Kotlin 函式時,會使用 invoke 關鍵字進行呼叫。通過反編譯程式碼,可以得知 Kotlin 中的 Function Types 資訊。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
存取可為空的變數,方式二: 使用 「let」 標準函數 kotlin 提供 「let」標準函數,用來檢查當資料值為 null,就不會去執行 {} 大括號裡面的程式區塊,反之資料不為空,則會執行大括號裡面的程式區塊。
Thumbnail
存取可為空的變數,方式二: 使用 「let」 標準函數 kotlin 提供 「let」標準函數,用來檢查當資料值為 null,就不會去執行 {} 大括號裡面的程式區塊,反之資料不為空,則會執行大括號裡面的程式區塊。
Thumbnail
當你在 Kotlin 中使用 val 或 var 定義一個屬性時,在 Java 中預設會轉換為 getter 和 setter 方法。如果你希望直接在 Java 中存取這個屬性,可以使用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的,而非生成 getter 和 sette
Thumbnail
當你在 Kotlin 中使用 val 或 var 定義一個屬性時,在 Java 中預設會轉換為 getter 和 setter 方法。如果你希望直接在 Java 中存取這個屬性,可以使用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的,而非生成 getter 和 sette
Thumbnail
在 Kotlin 程式語言中,屬性訪問 (Property Access ) 提供了一種簡潔的方式來存取 Java 類別中的公開屬性欄位,可以省去 getter 與 setter 呼叫方法。
Thumbnail
在 Kotlin 程式語言中,屬性訪問 (Property Access ) 提供了一種簡潔的方式來存取 Java 類別中的公開屬性欄位,可以省去 getter 與 setter 呼叫方法。
Thumbnail
在 Kotlin 程式語言中,使用關鍵字「interface」來定義介面。在介面中,每個函數預設都是開放的,不需要額外使用「open」關鍵字來宣告。但是,如果你要實作介面中的屬性與函數,就需要使用「override」關鍵字。 介面只定義了方法的名稱、參數和返回值,沒有方法的具體實現。
Thumbnail
在 Kotlin 程式語言中,使用關鍵字「interface」來定義介面。在介面中,每個函數預設都是開放的,不需要額外使用「open」關鍵字來宣告。但是,如果你要實作介面中的屬性與函數,就需要使用「override」關鍵字。 介面只定義了方法的名稱、參數和返回值,沒有方法的具體實現。
Thumbnail
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
Thumbnail
在 Kotlin 程式語言中,當你使用 apply 函數時,你可以將其視為對該物件進行屬性設定的操作。 apply 函數讓你能夠直接在物件上執行多個設定操作,並返回該物件本身,讓程式碼更為簡潔而具有可讀性。這個函數特別適合在建立物件後立即對其屬性進行初始化或設定的情境下使用。
Thumbnail
當今天某個類別,比如說 String,在不能直接修改其程式碼或無法繼承使用的情況下,你可以運用 Kotlin 的擴展功能,來擴展該類別的功能。它允許你擴展現有的類別,而不需修改其原始碼。這使得你能夠向任何類別添加新的功能,讓程式碼更具靈活性。
Thumbnail
當今天某個類別,比如說 String,在不能直接修改其程式碼或無法繼承使用的情況下,你可以運用 Kotlin 的擴展功能,來擴展該類別的功能。它允許你擴展現有的類別,而不需修改其原始碼。這使得你能夠向任何類別添加新的功能,讓程式碼更具靈活性。
Thumbnail
let 區域函數是 Kotlin 中一個非常實用的工具,特別適用於處理可空對象。它讓程式碼更加簡潔、安全,同時提高了可讀性。透過 let 區域函數,我們可以更優雅地處理可空性問題,使得程式開發更加高效順暢。
Thumbnail
let 區域函數是 Kotlin 中一個非常實用的工具,特別適用於處理可空對象。它讓程式碼更加簡潔、安全,同時提高了可讀性。透過 let 區域函數,我們可以更優雅地處理可空性問題,使得程式開發更加高效順暢。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News