# Kotlin 获取器和设置器

> 原文： [https://www.programiz.com/kotlin-programming/getters-setters](https://www.programiz.com/kotlin-programming/getters-setters)

#### 在本文中，您将借助于一个示例学习在 Kotlin 中使用获取器和设置器。

在学习获取器和设置器之前，请务必检查 [Kotlin 类和对象](/kotlin-programming/class-objects)。

在编程中，获取器用于获取属性的值。 同样，使用设置器来设置属性的值。

在 Kotlin 中，获取器和设置器是可选的，如果未在程序中创建它们，它们将自动生成。

* * *

## 获取器和设置器如何工作？

Kotlin 中的以下代码

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

相当于

```kt
class Person {
    var name: String = "defaultValue"

    // getter
    get() = field

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

实例化`Person`类的对象并初始化`name`属性时，它将传递给设置器参数`value`并将`field`设置为`value`。

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

现在，当您访问对象的`name`属性时，由于代码`get() = field`，您将获得`field`。

```kt
println("${p.name}")
```

这是一个工作示例：

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

运行该程序时，输出为：

```kt
jack

```

默认情况下，这就是获取器和设置器的工作方式。 但是，您可以使用获取器和设置器来更改属性的值（修改值）。

* * *

### 示例：更改属性的值

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

运行该程序时，输出为：

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

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

但是，还有其他逻辑设置器可以修改`age`属性的值。