Sobes.tech
Junior

Какво можеш да разкажеш за свойствата и също така за методите get и set в Kotlin?

sobes.tech AI

Отговор от AI

В Kotlin свойствата представляват съчетание от поле и съответния геттер и сеттер.

Определение на свойство:

class MyClass {
    var mutableProperty: String = "default"
    val immutableProperty: Int = 10
}

Тук mutableProperty е променливо свойство с геттер и сеттер по подразбиране. immutableProperty е неизменяемо свойство само с геттер по подразбиране.

Явно определяне на геттер и сеттер:

class MyClass {
    var customProperty: String = ""
        get() = field.toUpperCase() // Потребителски геттер
        set(value) {
            field = value.toLowerCase() // Потребителски сеттер
        }

    val computedProperty: Int
        get() = (1..10).random() // Изчисляемо свойство, няма поле
}
  • field - обратна връзка към полето на свойството вътре в геттера и сеттера. Използва се само за променливи свойства (var).
  • Геттерите и сеттерите могат да бъдат персонализирани, изпълнявайки допълнителна логика при достъп или промяна на свойството.
  • Изчисляемите свойства (computedProperty) нямат собствено поле и винаги изчисляват стойността при достъп.

Ключови моменти:

  • В Kotlin няма необходимост явно да създавате геттер и сеттер за всяко поле, както в Java. Те се генерират автоматично.
  • Свойствата са достъпни чрез точкова нотация (instance.propertyName).
  • Явното определяне на геттер и сеттер позволява добавяне на логика при достъп или промяна на свойството.
  • Геттерите за val свойство винаги трябва да връщат стойност от същия тип.
  • Сеттерите за var свойство приемат параметър от същия тип.

Сравнение на свойствата в Kotlin и полетата + методи в Java:

Свойство в Kotlin Поле + Метод в Java Описание
var myProperty: Type private Type myProperty; + public Type getMyProperty() + public void setMyProperty(Type value) Променливо свойство с автоматичен геттер и сеттер.
val myProperty: Type private Type myProperty; + public Type getMyProperty() Неизменяемо свойство само с автоматичен геттер.
Персонализиран геттер/сеттер Явно написана логика Добавяне на потребителска логика при достъп или промяна.
Изчисляемо свойство Явна функция, връщаща стойност Стойността на свойството се изчислява при всеки достъп.