ในตอนแรกฉันก็มีช่วงเวลาที่ยากลำบากในการทำความเข้าใจแนวคิดนี้ ดังนั้นให้ฉันอธิบายให้คุณได้รับความช่วยเหลือจากตัวอย่าง
พิจารณาคลาส Kotlin นี้
class DummyClass {
var size = 0;
var isEmpty
get() = size == 0
set(value) {
size = size * 2
}
}
ตอนนี้เมื่อเราดูโค้ดเราจะเห็นว่ามันมีคุณสมบัติ 2 อย่างคือ - size
(ด้วยตัวเข้าถึงเริ่มต้น) และisEmpty
(ด้วยตัวเข้าถึงที่กำหนดเอง) แต่มันมีเพียง 1 ฟิลด์คือsize
. เพื่อให้เข้าใจว่ามันมีเพียง 1 ฟิลด์ให้เราดู Java ที่เทียบเท่ากับคลาสนี้
ไปที่ Tools -> Kotlin -> Show Kotlin ByteCode ใน Android Studio คลิกที่ 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;
}
}
เห็นได้ชัดว่าคลาส java มีฟังก์ชัน getter และ setter สำหรับisEmpty
เท่านั้นและไม่มีฟิลด์ที่ประกาศไว้ ใน Kotlin ไม่มีฟิลด์สำรองสำหรับคุณสมบัติisEmpty
เนื่องจากคุณสมบัติไม่ได้ขึ้นอยู่กับฟิลด์นั้นเลย จึงไม่มีฟิลด์สำรอง
ตอนนี้ให้เราลบ getter และ setter ของ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
เป็นเขตข้อมูลสำรองเนื่องจาก getter และ setter สำหรับisEmpty
คุณสมบัติขึ้นอยู่กับมัน