Kotlin getters and setters

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

在编程中,getter用于获取属性的值。同样,setter用于设置属性的值。

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


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属性时,它会被传递给setter的参数value,并将field设置为value

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

现在,当您访问对象的name属性时,您将获得field,因为代码是get() = field

println("${p.name}")

这是一个可运行的示例

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

运行程序后,输出将是

jack

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


示例:更改属性的值

fun main(args: Array<String>) {

    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属性按预期工作。

然而,setter 中有额外的逻辑来修改age属性的值。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战