Sobes.tech
Middle

Como usar 'backing fields' em Kotlin?

sobes.tech IA

Resposta da IA

Os campos de apoio ('backing fields') são gerados automaticamente pelo compilador ao usar getters/setters padrão e não requerem declaração explícita. São usados para armazenar o valor da propriedade.

O uso explícito de 'backing fields' é necessário em casos raros, por exemplo, quando se deseja personalizar um getter ou setter e ao mesmo tempo fazer referência ao valor da própria propriedade, em vez de chamar o getter, o que pode levar a uma recursão.

Para acessar explicitamente o 'backing field' dentro de um getter ou setter, usa-se o identificador field.

class MyClass {
    var counter = 0 // O compilador gerará um backing field para esta propriedade
        set(value) {
            // Verificação de condição antes de atribuir
            if (value >= 0) {
                // Acesso explícito ao backing field
                field = value
            }
        }
}

O 'backing field' não é gerado para uma propriedade se não houver uma propriedade que o utilize (por exemplo, para propriedades abstratas ou de interface), ou se o getter e o setter estiverem completamente personalizados e não usarem o 'backing field' gerado pelo compilador.

Exemplo onde o 'backing field' não é gerado:

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

class AnotherClass {
    val computedProperty: Int
        get() = (1 + 2) // O getter não usa backing field, não há backing field
}