在本文中,您將借助一個(gè)示例學(xué)習(xí)在Kotlin中使用getter和setter。
在學(xué)習(xí)getter和setter之前,您最好已經(jīng)了解了Kotlin類(lèi)和對(duì)象。
在編程中,getter 用于獲取屬性的值。同樣,setter 用來(lái)設(shè)置屬性的值。
在Kotlin中,getter 和 setter是可選的,如果未在程序中創(chuàng)建它們,它們將自動(dòng)生成。
Kotlin中的以下代碼
class Person { var name: String = "defaultValue" }
等同于
class Person { var name: String = "defaultValue" // getter get() = field // setter set(value) { field = value } }
實(shí)例化 Person 類(lèi)的對(duì)象并初始化 name 屬性時(shí),它將傳遞給 setters 參數(shù)值并將 field 設(shè)置為 value。
val p = Person() p.name = "jack"
現(xiàn)在,當(dāng)您訪(fǎng)問(wèn)對(duì)象的 name 屬性時(shí),由于代碼 get()=field,您將獲得 field
println("${p.name}")
這是一個(gè)工作示例:
fun main(args: Array<String>) { val p = Person() p.name = "jack" println("${p.name}") } class Person { var name: String = "defaultValue" get() = field set(value) { field = value } }
運(yùn)行該程序時(shí),輸出為:
jack
默認(rèn)情況下,這就是 getter 和 setter 的工作方式。但是,您可以使用 getter 和 setter來(lái)更改屬性的值(修改值)。
fun main(args: Array<String>) { val maria = Girl() maria.actualAge = 15 maria.age = 15 println("瑪莉亞: 實(shí)際年齡 = ${maria.actualAge}") println("瑪莉亞: 虛擬年齡 = ${maria.age}") val angela = Girl() angela.actualAge = 35 angela.age = 35 println("安戈洛: 實(shí)際年齡 = ${angela.actualAge}") println("安戈洛: 虛擬年齡 = ${angela.age}") } class Girl { var age: Int = 0 get() = field set(value) { field = if (value < 18) 18 else if (value >= 18 && value <= 30) value else value-3 } var actualAge: Int = 0 }
運(yùn)行該程序時(shí),輸出為:
瑪莉亞: 實(shí)際年齡 = 15 瑪莉亞: 虛擬年齡 = 18 安戈洛: 實(shí)際年齡 = 35 安戈洛: 虛擬年齡 = 32
在這里,ActialAge屬性按預(yù)期工作。
但是,設(shè)置程序 setter 還有其他邏輯可以修改age屬性的值。