D'abord, j'ai moi aussi eu un moment difficile la compréhension de ce concept. Alors laissez-moi vous expliquer cela avec l'aide d'un exemple.
Considérer cette classe Kotlin
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Maintenant, quand on regarde le code, nous pouvons voir qu'il a 2 propriétés.e - size
(par défaut accesseurs) et isEmpty
(avec les accesseurs personnalisés). Mais il a seulement 1 champ soit size
. De comprendre qu'il a seulement 1 domaine, nous permettent de voir la Java équivalent de cette classe.
Allez dans Outils -> Kotlin -> Afficher Kotlin ByteCode dans Android Studio. Cliquez sur le 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;
}
}
Clairement, nous pouvons voir que la classe java a seulement getter et setter fonctions pour isEmpty
, et il n'y a pas de champ déclaré. De même, dans Kotlin, il n'y a pas de champ de stockage pour les biens isEmpty
, étant donné que la propriété ne dépend pas de ce domaine. Donc pas de champ de stockage.
Maintenant, nous allons nous retirer la coutume de lecture et de définition de l' isEmpty
de la propriété.
class DummyClass {
var size = 0;
var isEmpty = false
}
Et Java équivalent 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 stockage, car les getter et setter pour isEmpty
de la propriété en dépendent.