最初,我也很难理解这个概念。因此,让我借助一个示例向您解释一下。
考虑这个 Kotlin 类
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 字节码。点击反编译。
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 中,property 没有支持字段isEmpty
,因为该属性根本不依赖于该字段。因此没有支持领域。
现在让我们删除属性的自定义 getter 和 setter isEmpty
。
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
属性的 getter 和 setter 依赖于它。