English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Getter e Setter no Kotlin

Neste artigo, você aprenderá a usar getter e setter em Kotlin com um exemplo.

Antes de aprender sobre getter e setter, é melhor que você já saibaClasses e objetos em Kotlin.

No programação, getter é usado para obter o valor de uma propriedade. Da mesma forma, setter é usado para definir o valor de uma propriedade.

Em Kotlin, getter e setter são opcionais, se não forem criados no programa, eles serão gerados automaticamente.

Como o getter e setter funcionam?

O seguinte código em Kotlin

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

equivalente a

class Person {
    var name: String = "defaultValue"
    // getter
    get() = field
    // setter
    set(value) {
        field = value
    }
}

Ao instanciar um objeto da classe Person e inicializar a propriedade name, ele passa o valor do parâmetro ao setter e configura field como value.

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

Agora, quando você acessar a propriedade name do objeto, devido ao código get() = field, você obterá field

println("${p.name}")

Este é um exemplo de trabalho:

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

Quando o programa é executado, a saída é:

jack

Por padrão, é assim que o getter e setter funcionam. Mas, você pode usar getter e setter para alterar o valor de uma propriedade (modificar o valor).

Exemplo: Alterar o valor de uma propriedade

fun main(args: Array<String>) {
    val maria = Girl()
    maria.actualAge = 15
    maria.age = 15
    println("玛莉亚: 实际年龄 = ${maria.actualAge}")
    println("玛莉亚: 虚拟年龄 = ${maria.age}")
    val angela = Girl()
    angela.actualAge = 35
    angela.age = 35
    println("安戈洛: 实际年龄 = ${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
}

Quando o programa é executado, a saída é:

Maria: Idade Real = 15
Maria: Idade Virtual = 18
Angolo: Idade Real = 35
Angolo: Idade Virtual = 32

Aqui, a propriedade ActialAge funciona conforme esperado.

Mas, há outros lógicas que podem modificar o valor da propriedade age ao configurar o setter do programa.