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 isEmpty
kolom backing untuk properti , karena properti tidak bergantung pada kolom itu sama sekali. Jadi tidak ada backing field.
Sekarang mari kita hapus pengambil dan penyetel isEmpty
properti 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 size
dan isEmpty
. isEmpty
adalah bidang pendukung karena pengambil dan penyetel untuk isEmpty
properti bergantung padanya.