Спочатку мені теж було важко зрозуміти цю концепцію. Тож дозвольте пояснити вам це на прикладі.
Розглянемо цей клас Котліна
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Тепер, коли ми дивимося на код, ми можемо побачити, що він має 2 властивості, тобто - size
(із стандартними засобами доступу) та isEmpty
(із користувацькими засобами доступу). Але він має лише 1 поле, тобто size
. Щоб зрозуміти, що воно має лише 1 поле, давайте побачимо еквівалент Java цього класу.
Перейдіть до Інструменти -> Kotlin -> Показати Kotlin ByteCode в 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 є лише функції getter та setter для 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
від нього залежать геттер і сеттер властивості.