Ban đầu, tôi cũng gặp khó khăn khi hiểu khái niệm này. Vì vậy, hãy để tôi giải thích nó cho bạn với sự giúp đỡ của một ví dụ.
Hãy xem xét lớp Kotlin này
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
Bây giờ khi chúng ta nhìn vào mã, chúng ta có thể thấy rằng nó có 2 thuộc tính tức là - size
(với trình truy cập mặc định) và isEmpty
(với trình truy cập tùy chỉnh). Nhưng nó chỉ có 1 trường tức là size
. Để hiểu rằng nó chỉ có 1 trường, chúng ta hãy xem Java tương đương với lớp này.
Đi tới Công cụ -> Kotlin -> Hiển thị Kotlin ByteCode trong Android Studio. Nhấp vào 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;
}
}
Rõ ràng, chúng ta có thể thấy rằng lớp java chỉ có các hàm getter và setter isEmpty
, và không có trường nào được khai báo cho nó. Tương tự trong Kotlin, không có trường hỗ trợ cho thuộc tính isEmpty
, vì thuộc tính hoàn toàn không phụ thuộc vào trường đó. Do đó không có trường hỗ trợ.
Bây giờ chúng ta hãy xóa getter tùy chỉnh và setter của thuộc isEmpty
tính.
class DummyClass {
var size = 0;
var isEmpty = false
}
Và Java tương đương với lớp trên là
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;
}
}
Ở đây chúng ta thấy cả các trường size
và isEmpty
. isEmpty
là một trường hỗ trợ vì getter và setter cho isEmpty
thuộc tính phụ thuộc vào nó.