เมธอดที่เป็นไปตามอนุสัญญา Java สำหรับ getters และ setters (เมธอดไม่มีอาร์กิวเมนต์ที่มีชื่อขึ้นต้นด้วยเมธอด get และ single-argument ที่มีชื่อขึ้นต้นด้วย set) จะแสดงเป็นคุณสมบัติใน Kotlin แต่ในขณะที่สร้างคุณสมบัติสำหรับคู่ Java getter / setter Kotlin ในตอนแรกมองหา getter getter เพียงพอที่จะอนุมานประเภทของคุณสมบัติจากประเภทของ getter ในทางกลับกันคุณสมบัติจะไม่ถูกสร้างขึ้นหากมีเพียง setter เท่านั้น (เนื่องจาก Kotlin ไม่สนับสนุนคุณสมบัติ set-only ในขณะนี้)
เมื่อ setter เข้ามามีบทบาทกระบวนการสร้างคุณสมบัติจะค่อนข้างคลุมเครือ เหตุผลก็คือ getter และ setter อาจมีประเภทที่แตกต่างกัน ยิ่งไปกว่านั้น getter และ / หรือ setter อาจถูกแทนที่ในคลาสย่อยซึ่งเป็นกรณีของ EditText ใน Android
ในกรณีข้างต้นคลาส Android TextView มี getter
CharSequence getText()
และเซตเตอร์เป็นโมฆะ
setText(CharSequence)
หากฉันมีตัวแปรประเภท TextView รหัสของฉันจะทำงานได้ดี แต่ฉันใช้คลาส EditText ซึ่งมี getter ที่ถูกแทนที่
Editable getText()
ซึ่งหมายความว่าคุณจะได้รับ Editable สำหรับ EditText และตั้งค่า Editable เป็น EditText ดังนั้น Kotlin จึงสร้างข้อความคุณสมบัติสังเคราะห์ประเภทแก้ไขได้อย่างสมเหตุสมผล เนื่องจากคลาส String ไม่สามารถแก้ไขได้นั่นเป็นเหตุผลที่ฉันไม่สามารถกำหนดอินสแตนซ์ String ให้กับคุณสมบัติข้อความของคลาส EditText
ดูเหมือนว่า JetBrains ลืมระบุบทบาทที่โดดเด่นของเมธอด getter ในขณะที่สร้างคุณสมบัติ kotlin สำหรับ Java getter และ setter method อย่างไรก็ตามฉันได้ส่งคำขอดึงไปยังเว็บไซต์ Jet brains kotlin ผ่าน github แล้ว
ฉันได้อธิบายปัญหาข้างต้นในโพสต์ขนาดกลางนี้ด้วยเช่นกันKotlin สร้างคุณสมบัติจาก Java Getters และ Setters (ไม่มีเอกสารโดย Jetbrains)