【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
}