Inicialmente, eu também tive dificuldade em entender esse conceito. Portanto, deixe-me explicar com a ajuda de um exemplo.
Considere esta aula de Kotlin
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Agora, quando olhamos para o código, podemos ver que ele tem 2 propriedades, isto é - size
(com acessores padrão) e isEmpty
(com acessores personalizados). Mas tem apenas 1 campo iesize
. Para entender que ele possui apenas 1 campo, vamos ver o equivalente Java dessa classe.
Vá para Ferramentas -> Kotlin -> Mostrar Kotlin ByteCode no Android Studio. Clique em Decompile.
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;
}
}
Claramente, podemos ver que a classe java tem apenas funções getter e setter para isEmpty
, e não há nenhum campo declarado para ela. Da mesma forma, em Kotlin, não há campo de apoio para a propriedade isEmpty
, já que a propriedade não depende desse campo. Portanto, não há campo de apoio.
Agora vamos remover o getter e setter personalizados de isEmpty
propriedade.
class DummyClass {
var size = 0;
var isEmpty = false
}
E o equivalente em Java da classe acima é
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;
}
}
Aqui vemos os campos size
e isEmpty
. isEmpty
é um campo de apoio porque o getter e o setter da isEmpty
propriedade dependem dele.