📜  Kotlin中getter和setter

📅  最后修改于: 2020-10-05 14:49:17             🧑  作者: Mango

在本文中,您将借助一个示例学习在Kotlin中使用getter和setter。

 

在学习getter和setter之前,请务必检查Kotlin类和对象。

在编程中,吸气剂用于获取属性的值。同样,使用setter来设置属性的值。

在Kotlin中,getter和setter是可选的,如果未在程序中创建它们,它们将自动生成。


吸气器和吸气器如何工作?

Kotlin中的以下代码

class Person {
    var name: String = "defaultValue"
}

相当于

class Person {
    var name: String = "defaultValue"

    // getter
    get() = field

    // setter
    set(value) {
        field = value
    }
}

当实例化Person类的对象并初始化name属性时,它会传递给setters参数value ,并将field设置为value

val p = Person()
p.name = "jack"

现在,当你访问该对象的name属性,你会得到,因为代码领域 get() = field

println("${p.name}")

 

这是一个工作示例:

fun main(args: Array) {

    val p = Person()
    p.name = "jack"
    println("${p.name}")
}

class Person {
    var name: String = "defaultValue"

    get() = field

    set(value) {
        field = value
    }
}

运行该程序时,输出为:

jack

默认情况下,这就是getter和setter的工作方式。但是,您可以使用getter和setter来更改属性的值(修改值)。


示例:更改属性的值

fun main(args: Array) {

    val maria = Girl()
    maria.actualAge = 15
    maria.age = 15
    println("Maria: actual age = ${maria.actualAge}")
    println("Maria: pretended age = ${maria.age}")

    val angela = Girl()
    angela.actualAge = 35
    angela.age = 35
    println("Angela: actual age = ${angela.actualAge}")
    println("Angela: pretended age = ${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
}

运行该程序时,输出为:

Maria: actual age = 15
Maria: pretended age = 18
Angela: actual age = 35
Angela: pretended age = 32

在这里, actualAge属性按预期方式工作。

但是,设置程序还有其他逻辑可以修改age属性的值。