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 isEmpty
proprietà.
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 size
che isEmpty
. isEmpty
è un campo di supporto perché il getter e il setter per la isEmpty
proprietà dipendono da esso.