Sobes.tech
Middle

Kako koristiti 'backing fields' u Kotlinu?

sobes.tech АИ

Одговор од АИ

Podržana polja ('backing fields') automatski se generišu od strane kompajlera kada se koriste standardni getteri/setteri i ne zahtevaju eksplicitnu deklaraciju. Koriste se za skladištenje vrednosti svojstva.

Ekslicitno korišćenje 'backing fields' je retko potrebno, na primer, kada želite da prilagodite getter ili setter i istovremeno da se referišete na vrednost samog svojstva, umesto da pozivate getter, što može dovesti do rekurzije.

Za eksplicitni pristup 'backing field'-u unutar gettera ili settera koristi se identifikator field.

class MyClass {
    var counter = 0 // Kompajler će generisati backing field za ovo svojstvo
        set(value) {
            // Provera uslova pre dodeljivanja
            if (value >= 0) {
                // Ekslicitni pristup backing field-u
                field = value
            }
        }
}

'Backing field' se ne generiše za svojstvo ako ne postoji svojstvo koje ga koristi (na primer, za apstraktne svojstva ili svojstva interfejsa), ili ako su getter i setter potpuno prilagođeni i ne koriste generisani od strane kompajlera 'backing field'.

Primer gde se 'backing field' ne generiše:

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

class AnotherClass {
    val computedProperty: Int
        get() = (1 + 2) // Getter ne koristi backing field, nema backing field
}