Sobes.tech
Middle

Kaip naudoti 'backing fields' Kotlin?

sobes.tech AI

Atsakymas iš AI

Apsauginiai laukai ('backing fields') automatiškai generuojami kompiliatoriaus naudojant standartinius getterius/setterius ir nereikalauja aiškaus deklaravimo. Jie naudojami savybės reikšmei saugoti.

Aiškus 'backing fields' naudojimas yra retas atvejis, pavyzdžiui, kai norima pritaikyti getterį ar setterį ir tuo pačiu nurodyti į savybės reikšmę, o ne iškviesti getterį, kas gali sukelti rekursiją.

Norint aiškiai pasiekti 'backing field' getterio ar setterio viduje, naudojamas identifikatorius field.

class MyClass {
    var counter = 0 // Kompiliatorius sugeneruos backing field šiai savybei
        set(value) {
            // Sąlygos patikrinimas prieš priskyrimą
            if (value >= 0) {
                // Aiškus pasiekimas prie backing field
                field = value
            }
        }
}

'Backing field' nėra sugeneruojamas, jei nėra savybės, kuri ją naudoja (pavyzdžiui, abstrakčios savybės ar sąsajos savybės), arba jei getteris ir setteris yra visiškai pritaikyti ir nenaudoja kompiliatoriaus sugeneruoto 'backing field'.

Pavyzdys, kur 'backing field' nėra sugeneruojamas:

interface MyInterface {
    val abstractProperty: String // Be backing field
}

class AnotherClass {
    val computedProperty: Int
        get() = (1 + 2) // Getteris nenaudoja backing field, nėra backing field
}