English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как использовать getter и setter в Kotlin с помощью примера.
Прежде чем изучать getter и setter, лучше всего уже понятьКлассы и объекты Kotlin.
В программировании getter используется для получения значения свойства. Таким же образом, 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 оно передается в параметры setter и устанавливается field в value.
val p = Person() p.name = "jack"
Теперь, когда вы обращаетесь к свойству name объекта, поскольку код get() = field, вы получите 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.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 }
При запуске программы выводится:
Мария: Фактический возраст = 15 Мария: Виртуальный возраст = 18 Ангело: Фактический возраст = 35 Ангело: Виртуальный возраст = 32
Здесь, свойство ActialAge работает как ожидалось.
Однако, можно изменить логику setter программы, чтобы изменить значение свойства age.