All'inizio anche io ho avuto difficoltà a capire questo concetto. Quindi lascia che te lo spieghi con l'aiuto di un esempio.
Considera questa classe di Kotlin
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Ora, quando guardiamo il codice, possiamo vedere che ha 2 proprietà cioè - size(con funzioni di accesso predefinite) e isEmpty(con funzioni di accesso personalizzate). Ma ha solo 1 campo cioè size. Per capire che ha solo 1 campo, vediamo l'equivalente Java di questa classe.
Vai su Strumenti -> Kotlin -> Mostra Kotlin ByteCode in Android Studio. Fare clic su Decompile.
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;
}
}
Chiaramente possiamo vedere che la classe java ha solo funzioni getter e setter per isEmpty, e non vi è alcun campo dichiarato per essa. Allo stesso modo in Kotlin, non esiste un campo di supporto per la proprietà isEmpty, poiché la proprietà non dipende affatto da quel campo. Quindi nessun campo di supporto.
Ora rimuoviamo il getter personalizzato e il setter della isEmptyproprietà.
class DummyClass {
var size = 0;
var isEmpty = false
}
E l'equivalente Java della classe precedente è
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;
}
}
Qui vediamo sia i campi sizeche isEmpty. isEmptyè un campo di supporto perché il getter e il setter per la isEmptyproprietà dipendono da esso.