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ą.
valsavybės geteris visada turi grąžinti tą patį tipą.varsavybė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. |