Al principio, a mí también me costó mucho entender este concepto. Déjame explicártelo con la ayuda de un ejemplo.
Considere esta clase de Kotlin
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Ahora, cuando miramos el código, podemos ver que tiene 2 propiedades, es decir - size(con accesos predeterminados) y isEmpty(con accesos personalizados). Pero solo tiene 1 campo, es decir size. Para entender que solo tiene 1 campo, veamos el equivalente en Java de esta clase.
Vaya a Herramientas -> Kotlin -> Mostrar Kotlin ByteCode en Android Studio. Haga clic en Descompilar.
public final class DummyClass {
private int size;
public final int getSize() {
return this.size;
}
public final void setSize(int var1) {
this.size = var1;
}
public final boolean isEmpty() {
return this.size == 0;
}
public final void setEmpty(boolean value) {
this.size *= 2;
}
}
Claramente podemos ver que la clase java solo tiene funciones getter y setter para isEmpty, y no hay ningún campo declarado para ello. De manera similar, en Kotlin, no hay un campo de respaldo para la propiedad isEmpty, ya que la propiedad no depende en absoluto de ese campo. Por lo tanto, no hay campo de respaldo.
Ahora eliminemos el getter personalizado y el setter de isEmptypropiedad.
class DummyClass {
var size = 0;
var isEmpty = false
}
Y el equivalente en Java de la clase anterior es
public final class DummyClass {
private int size;
private boolean isEmpty;
public final int getSize() {
return this.size;
}
public final void setSize(int var1) {
this.size = var1;
}
public final boolean isEmpty() {
return this.isEmpty;
}
public final void setEmpty(boolean var1) {
this.isEmpty = var1;
}
}
Aquí vemos tanto los campos sizecomo isEmpty. isEmptyes un campo de respaldo porque el captador y el definidor de la isEmptypropiedad dependen de él.