Поначалу мне тоже было непросто понять эту концепцию. Итак, позвольте мне объяснить вам это на примере.
Рассмотрим этот класс Котлина
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Теперь, когда мы смотрим на код, мы видим, что у него есть 2 свойства, а именно - size
(со стандартными аксессуарами) и isEmpty
(с пользовательскими аксессуарами). Но она имеет только 1 поле ИЭ size
. Чтобы понять, что у него только одно поле, давайте посмотрим на Java-эквивалент этого класса.
Перейдите в Инструменты -> Котлин -> Показать байтовый код Котлина в Android Studio. Щелкните "Декомпилировать".
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 имеет только функции получения и установки isEmpty
, и для него не объявлено поле. Точно так же в Котлине нет поддерживающего поля для свойства 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
от него зависят методы получения и установки свойства.