最初,我也很难理解这个概念。因此,让我借助示例向您解释。
考虑这个科特林课
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
现在,当我们查看代码时,我们可以看到它具有2个属性,即- size
(具有默认访问器)和isEmpty
(具有自定义访问器)。但它只有1个字段,即size
。要了解它只有1个字段,让我们看一下与该类等效的Java。
转到工具-> Kotlin->在Android Studio中显示Kotlin ByteCode。单击反编译。
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;
}
}
显然,我们可以看到java类仅具有getter和setter函数isEmpty
,并且没有为其声明任何字段。类似地,在Kotlin中,没有属性的支持字段isEmpty
,因为属性完全不依赖于该字段。因此没有后备领域。
现在,让我们删除isEmpty
属性的自定义getter和setter 。
class DummyClass {
var size = 0;
var isEmpty = false
}
并且上述类的Java等效为
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;
}
}
在这里,我们同时看到字段size
和isEmpty
。isEmpty
是一个后备字段,因为isEmpty
属性的获取器和设置器依赖于它。