当初、私もこの概念を理解するのに苦労しました。それで、例の助けを借りてそれをあなたに説明させてください。
このKotlinクラスを検討してください
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
コードを見ると、2つのプロパティ、つまり- size
(デフォルトのアクセサーを使用)とisEmpty
(カスタムアクセサーを使用)があることがわかります。ただし、フィールドは1つだけsize
です。フィールドが1つしかないことを理解するために、このクラスに相当するJavaを見てみましょう。
[ツール]-> [Kotlin]-> [AndroidStudioでKotlinByteCodeを表示]に移動します。逆コンパイルをクリックします。
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
プロパティのカスタムゲッターとセッターを削除しましょう。
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
それに依存しているため、はバッキングフィールドです。