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 isEmpty
propiedad.
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 size
como isEmpty
. isEmpty
es un campo de respaldo porque el captador y el definidor de la isEmpty
propiedad dependen de él.