Kotlin Getter 和 Setter

在本文中,您將借助一個(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)生成。

getter 和 setter 如何工作?

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屬性的值。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清