Sobes.tech
Middle

Jak używać 'backing fields' w Kotlinie?

sobes.tech AI

Odpowiedź od AI

Pola wsparcia ('backing fields') są automatycznie generowane przez kompilator podczas korzystania z domyślnych getterów/setterów i nie wymagają jawnej deklaracji. Służą do przechowywania wartości właściwości.

Jawne korzystanie z 'backing fields' jest potrzebne w rzadkich przypadkach, na przykład gdy chcesz dostosować getter lub setter i jednocześnie odwołać się do samej wartości właściwości, a nie do wywołania gettera, co może prowadzić do rekurencji.

Aby jawnie uzyskać dostęp do 'backing field' wewnątrz gettera lub settera, używa się identyfikatora field.

class MyClass {
    var counter = 0 // Kompilator wygeneruje backing field dla tej właściwości
        set(value) {
            // Sprawdzenie warunku przed przypisaniem
            if (value >= 0) {
                // Jawy dostęp do backing field
                field = value
            }
        }
}

'Backing field' nie jest generowany dla właściwości, jeśli nie ma właściwości, która go używa (np. dla właściwości abstrakcyjnych lub interfejsów), lub jeśli getter i setter są całkowicie dostosowane i nie korzystają z wygenerowanego przez kompilator 'backing field'.

Przykład, w którym 'backing field' nie jest generowany:

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

class AnotherClass {
    val computedProperty: Int
        get() = (1 + 2) // Getter nie korzysta z backing field, brak backing field
}