ฉันมีคำถามที่แน่นอนนี้เมื่อ 30 นาทีที่แล้วดังนั้นฉันจึงเริ่มขุดคุ้ยและไม่พบวิธีแก้ปัญหาหรือวิธีแก้ไขใด ๆ สำหรับสิ่งนี้ แต่ในขณะที่ค้นหาฉันพบส่วนนี้ในเว็บไซต์ Kotlinglang ที่ระบุว่า:
โปรดทราบว่าส่วนขยายสามารถกำหนดได้ด้วยประเภทตัวรับที่ว่างเปล่า ส่วนขยายดังกล่าวสามารถเรียกใช้กับตัวแปรออบเจ็กต์ได้แม้ว่าค่าของมันจะเป็นโมฆะก็ตาม
ดังนั้นฉันจึงมีความคิดที่บ้าคลั่งที่สุดเท่าที่เคยมีมาทำไมไม่กำหนดฟังก์ชันส่วนขยายด้วยตัวรับที่เป็นโมฆะ (โดยไม่ใช้ตัวรับสัญญาณนั้นจริงๆ) แล้วเรียกมันบนวัตถุว่าง! ฉันก็เลยลองดูและมันก็ใช้ได้ดี แต่มันดูน่าเกลียดมาก มันเป็นเช่นนี้:
(null as Type?).staticFunction(param1, param2)
ดังนั้นฉันจึงไปรอบ ๆ โดยการสร้าง val ในไฟล์นามสกุลของประเภทตัวรับที่มีค่าเป็นโมฆะแล้วใช้ในคลาสอื่นของฉัน ดังตัวอย่างต่อไปนี้เป็นวิธีที่ฉันใช้ฟังก์ชันส่วนขยาย "คงที่" สำหรับNavigation
คลาสใน Android: ในไฟล์ NavigationExtensions.kt ของฉัน:
val SNavigation: Navigation? = null
fun Navigation?.createNavigateOnClickListener(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null,
navigationExtras: Navigator.Extras? = null) : (View) -> Unit {
return { view: View -> view.navigate(resId, args, navOptions, navigationExtras) }
}
ในรหัสที่ใช้:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
เห็นได้ชัดว่านี่ไม่ใช่ชื่อคลาส แต่เป็นเพียงตัวแปรของประเภทคลาสที่มีค่า null เห็นได้ชัดว่าน่าเกลียดในฝั่งผู้สร้างส่วนขยาย (เพราะต้องสร้างตัวแปร) และฝั่งนักพัฒนา (เพราะต้องใช้SType
รูปแบบแทนชื่อคลาสจริง) แต่เป็นสิ่งที่ใกล้เคียงที่สุดที่สามารถทำได้ในตอนนี้ เมื่อเทียบกับฟังก์ชันคงที่จริง หวังว่าผู้ผลิตภาษา Kotlin จะตอบสนองต่อปัญหาที่สร้างขึ้นและเพิ่มคุณลักษณะนั้นในภาษา