Au début, j'ai aussi eu du mal à comprendre ce concept. Alors laissez-moi vous l'expliquer à l'aide d'un exemple.
Considérez cette classe Kotlin
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Maintenant, quand nous regardons le code, nous pouvons voir qu'il a 2 propriétés à savoir - size(avec les accesseurs par défaut) et isEmpty(avec les accesseurs personnalisés). Mais il n'a qu'un seul champ ie size. Pour comprendre qu'elle n'a qu'un seul champ, voyons l'équivalent Java de cette classe.
Allez dans Outils -> Kotlin -> Afficher Kotlin ByteCode dans Android Studio. Cliquez sur Décompiler.
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;
}
}
Nous pouvons clairement voir que la classe java n'a que des fonctions getter et setter pour isEmpty, et il n'y a pas de champ déclaré pour cela. De même, dans Kotlin, il n'y a pas de champ de sauvegarde pour la propriété isEmpty, car la propriété ne dépend pas du tout de ce champ. Donc pas de champ de support.
Supprimons maintenant le getter et le setter de isEmptypropriété personnalisés.
class DummyClass {
var size = 0;
var isEmpty = false
}
Et l'équivalent Java de la classe ci-dessus est
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;
}
}
Ici, nous voyons à la fois les champs sizeet isEmpty. isEmptyest un champ de sauvegarde car le getter et le setter pour la isEmptypropriété en dépendent.