Başlangıçta ben de bu kavramı anlamakta zorlandım. Öyleyse size bir örnek yardımıyla açıklamama izin verin.
Bu Kotlin sınıfını düşünün
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Şimdi koda baktığımızda, 2 özelliğe sahip olduğunu görebiliriz, yani - size
(varsayılan erişimcilerle) ve isEmpty
(özel erişimcilerle). Ama sadece 1 alanı var yani size
. Sadece 1 alanı olduğunu anlamak için, bu sınıfın Java karşılığını görelim.
Araçlar -> Kotlin -> Kotlin ByteCode'u Android Studio'da Göster'e gidin. Decompile üzerine tıklayın.
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;
}
}
Açıkçası, java sınıfının yalnızca alıcı ve ayarlayıcı işlevlerine sahip olduğunu isEmpty
ve bunun için tanımlanmış bir alan olmadığını görebiliriz. Benzer şekilde Kotlin'de, isEmpty
mülk bu alana hiç bağlı olmadığından mülk için destek alanı yoktur . Böylece destek alanı yok.
Şimdi özel alıcı ve isEmpty
özellik ayarlayıcısını kaldıralım .
class DummyClass {
var size = 0;
var isEmpty = false
}
Ve yukarıdaki sınıfın Java eşdeğeri
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;
}
}
Burada alanları hem görmek size
ve isEmpty
. isEmpty
bir destek alanıdır çünkü isEmpty
mülk için alıcı ve ayarlayıcı buna bağlıdır.