Awalnya, saya juga kesulitan memahami konsep ini. Jadi izinkan saya menjelaskannya kepada Anda dengan bantuan sebuah contoh.
Pertimbangkan kelas Kotlin ini
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Sekarang ketika kita melihat kode, kita dapat melihat bahwa ia memiliki 2 properti yaitu - size(dengan pengakses default) dan isEmpty(dengan pengakses kustom). Tetapi hanya memiliki 1 bidang yaitu size. Untuk memahami bahwa ia hanya memiliki 1 kolom, mari kita lihat padanan Java untuk kelas ini.
Pergi ke Tools -> Kotlin -> Show Kotlin ByteCode di Android Studio. Klik pada Dekompilasi.
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;
}
}
Jelas kita dapat melihat bahwa kelas java hanya memiliki fungsi pengambil dan penyetel isEmpty, dan tidak ada bidang yang dideklarasikan untuk itu. Demikian pula di Kotlin, tidak ada isEmptykolom backing untuk properti , karena properti tidak bergantung pada kolom itu sama sekali. Jadi tidak ada backing field.
Sekarang mari kita hapus pengambil dan penyetel isEmptyproperti kustom .
class DummyClass {
var size = 0;
var isEmpty = false
}
Dan padanan Java dari kelas di atas adalah
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;
}
}
Di sini kita melihat ladang sizedan isEmpty. isEmptyadalah bidang pendukung karena pengambil dan penyetel untuk isEmptyproperti bergantung padanya.