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 isEmpty
proprié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 size
et isEmpty
. isEmpty
est un champ de sauvegarde car le getter et le setter pour la isEmpty
propriété en dépendent.