在本文中,您將借助一個(gè)示例學(xué)習(xí)在Kotlin中使用getter和setter。
在學(xué)習(xí)getter和setter之前,您最好已經(jīng)了解了Kotlin類和對(duì)象。
在編程中,getter 用于獲取屬性的值。同樣,setter 用來設(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 類的對(duì)象并初始化 name 屬性時(shí),它將傳遞給 setters 參數(shù)值并將 field 設(shè)置為 value。
val p = Person() p.name = "jack"
現(xiàn)在,當(dāng)您訪問對(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來更改屬性的值(修改值)。
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屬性的值。