Sobes.tech
Junior

Ką gali papasakoti apie savybes ir taip pat get ir set metodus Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin savybės yra derinys tarp lauko ir atitinkamojo geterio bei seterio.

Savybės apibrėžimas:

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

Čia mutableProperty yra keičiamas savybė su numatytu geteriu ir seteriu. immutableProperty yra nekeitima savybė tik su numatytu geteriu.

Aiškus geterio ir seterio apibrėžimas:

class MyClass {
    var customProperty: String = ""
        get() = field.toUpperCase() // Naudotojo geteris
        set(value) {
            field = value.toLowerCase() // Naudotojo seteris
        }

    val computedProperty: Int
        get() = (1..10).random() // Apskaičiuojama savybė, neturi lauko
}
  • field - nuoroda į savybės lauką geterio ir seterio viduje. Naudojama tik keičiamoms savybėms (var).
  • Geteriai ir seteriai gali būti pritaikyti, atliekant papildinę logiką prieigos ar keitimo metu.
  • Apskaičiuojamos savybės (computedProperty) neturi savo lauko ir visada skaičiuoja reikšmę prieigos metu.

Pagrindiniai punktai:

  • Kotlin nereikia aiškiai kurti geterių ir seterių kiekvienam laukui, kaip Java. Jie automatiškai sugeneruojami.
  • Savybės pasiekiamos per taškų notaciją (instance.propertyName).
  • Aiškus geterio ir seterio apibrėžimas leidžia pridėti papildomą logiką.
  • val savybės geteris visada turi grąžinti tą patį tipą.
  • var savybės seteris priima tą patį tipą.

Savybių palyginimas Kotlin ir laukų + metodų Java:

Kotlin savybė Java laukas + metodai Aprašymas
var myProperty: Tipas private Tipas myProperty; + public Tipas getMyProperty() + public void setMyProperty(Tipas value) Keičiamas savybė su automatiniais geteriu ir seteriu.
val myProperty: Tipas private Tipas myProperty; + public Tipas getMyProperty() Ne keičiamas savybė tik su geteriu.
Pridėtas geteris/seteris Rankiniu būdu parašyta logika Papildoma vartotojo logika prieigos ar keitimo metu.
Apskaičiuojama savybė Metodas, kuris grąžina reikšmę Reikšmė skaičiuojama kiekvieno užklausos metu.