Getters และ setters ถูกสร้างขึ้นโดยอัตโนมัติใน Kotlin ถ้าคุณเขียน:
val isEmpty: Boolean
เท่ากับรหัส Java ต่อไปนี้:
private final Boolean isEmpty;
public Boolean isEmpty() {
return isEmpty;
}
ในกรณีของคุณตัวแก้ไขการเข้าถึงส่วนตัวซ้ำซ้อน - isEmpty เป็นส่วนตัวโดยค่าเริ่มต้นและสามารถเข้าถึงได้โดย getter เท่านั้น เมื่อคุณพยายามรับคุณสมบัติ isEmpty ของอ็อบเจ็กต์คุณจะเรียกเมธอด get ตามความเป็นจริง เพื่อความเข้าใจมากขึ้นเกี่ยวกับ getters / setters ใน Kotlin: ตัวอย่างโค้ดทั้งสองด้านล่างมีค่าเท่ากัน:
var someProperty: String = "defaultValue"
และ
var someProperty: String = "defaultValue"
get() = field
set(value) { field = value }
นอกจากนี้ฉันต้องการชี้ให้เห็นว่าthis
ใน getter ไม่ใช่ทรัพย์สินของคุณ - เป็นตัวอย่างของคลาส หากคุณต้องการเข้าถึงค่าของฟิลด์ใน getter หรือ setter คุณสามารถใช้คำสงวนfield
สำหรับมัน:
val isEmpty: Boolean
get() = field
หากคุณต้องการเพียงแค่มีเมธอด get ในการเข้าถึงสาธารณะ - คุณสามารถเขียนโค้ดนี้:
var isEmpty: Boolean
private set
เนื่องจากตัวปรับแต่งส่วนตัวใกล้กับ set accessor คุณสามารถตั้งค่านี้ได้เฉพาะในวิธีการภายในวัตถุของคุณ
In your case the private access modifier is redundant
อย่างไร? Kotlin doc พูดว่าตัวปรับแต่งเริ่มต้นเป็นสาธารณะ kotlinlang.org/docs/reference/visibility-modifiers.html