Reflection ของ Kotlin: KClass, KFunction, KProperty
สำรวจข้อมูลเมตาของคลาสด้วย KClass และตรวจสอบสมาชิกด้วย reflection
Reflection ของ Kotlin: KClass, KFunction, KProperty เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
รีเฟล็กชันคืออะไร
รีเฟล็กชันช่วยให้โค้ดตรวจสอบและเรียกใช้โครงสร้างของตนเองได้ในขณะทำงาน เช่น คลาส ฟังก์ชัน คุณสมบัติ คำอธิบายประกอบ และตัวสร้าง Kotlin ครอบ API รีเฟล็กชันของ JVM ด้วยชนิดข้อมูลที่สมบูรณ์ยิ่งขึ้นภายใต้แพ็กเกจ kotlin.reflect
การรับ KClass
ใช้ ::class กับชนิดข้อมูลหรืออินสแตนซ์เพื่อรับการอ้างอิง KClass:
val klass: KClass<String> = String::class
val instance: KClass<out Any> = "hello"::class
println(klass.simpleName) // "String"คุณสมบัติของ KClass
KClass เปิดเผยเมทาดาทาเกี่ยวกับคลาส:
val klass = String::class
println(klass.simpleName) // "String"
println(klass.qualifiedName) // "kotlin.String"
println(klass.isAbstract) // false
println(klass.constructors.size) // number of constructorsKFunction: การอ้างอิงที่เรียกใช้ได้
ใช้ ::functionName เพื่อรับการอ้างอิง KFunction คุณสามารถตรวจสอบพารามิเตอร์ของการอ้างอิงและเรียกใช้ได้:
fun greet(name: String) = "Hello, $name!"
val fn: KFunction<String> = ::greet
println(fn.name) // "greet"
println(fn.call("Kotlin")) // "Hello, Kotlin!"การตรวจสอบพารามิเตอร์
KFunction.parameters ส่งคืนรายการออบเจ็กต์ KParameter ที่มีชื่อ ชนิดข้อมูล และข้อมูลว่าเป็นตัวเลือกหรือไม่:
fun add(a: Int, b: Int) = a + b
::add.parameters.forEach {
println("${it.name}: ${it.type}")
}
// a: kotlin.Int
// b: kotlin.IntKProperty: การอ้างอิงคุณสมบัติ
การอ้างอิงคุณสมบัติจะบันทึกคุณสมบัติไว้เป็นออบเจ็กต์ที่ใช้งานได้โดยตรง KProperty0 ใช้สำหรับคุณสมบัติที่ไม่มีตัวรับ ส่วน KProperty1 ใช้สำหรับคุณสมบัติสมาชิก
data class User(val name: String, val age: Int)
val prop: KProperty1<User, String> = User::name
val user = User("Alice", 30)
println(prop.get(user)) // "Alice"คุณสมบัติที่เปลี่ยนแปลงได้ด้วย KMutableProperty
สำหรับคุณสมบัติ var การอ้างอิงจะเป็น KMutableProperty1 ซึ่งมีฟังก์ชัน set ด้วย:
class Box(var value: Int)
val prop: KMutableProperty1<Box, Int> = Box::value
val box = Box(10)
prop.set(box, 42)
println(box.value) // 42การแสดงสมาชิกทั้งหมด
KClass.members ส่งคืนสมาชิกที่มองเห็นได้ทั้งหมด ทั้งฟังก์ชันและคุณสมบัติ ส่วน KClass.declaredMemberProperties ส่งคืนเฉพาะคุณสมบัติที่ประกาศในคลาสนั้น
data class Point(val x: Int, val y: Int)
Point::class.declaredMemberProperties.forEach {
println(it.name) // "x", "y"
}การสร้างอินสแตนซ์ผ่าน KClass
เรียกใช้ KClass.createInstance() ซึ่งต้องมีตัวสร้างที่ไม่มีพารามิเตอร์ หรือใช้ KClass.constructors เพื่อควบคุมการสร้างได้อย่างเต็มที่:
class Counter {
var count = 0
}
val c = Counter::class.createInstance()
c.count = 5
println(c.count) // 5การพึ่งพา Kotlin Reflect
รีเฟล็กชันของ Kotlin ต้องใช้สิ่งประดิษฐ์ kotlin-reflect ซึ่งไม่ได้รวมอยู่ในไลบรารีมาตรฐาน ให้เพิ่มสิ่งนี้ลงในกระบวนการสร้างของคุณ:
// build.gradle.kts
implementation("org.jetbrains.kotlin:kotlin-reflect")หมายเหตุด้านประสิทธิภาพ
รีเฟล็กชันทำงานช้ากว่าโค้ดโดยตรงอย่างมาก ให้แคชการอ้างอิง KClass, KFunction และ KProperty ตั้งแต่เริ่มต้นโปรแกรม หลีกเลี่ยงการเรียกใช้สิ่งเหล่านี้ในลูปที่ทำงานบ่อย สำหรับโค้ดเครื่องมือและเฟรมเวิร์กส่วนใหญ่ ต้นทุนนี้ยอมรับได้
ตรวจสอบอย่างรวดเร็ว
ชนิดข้อมูล Kotlin ใดใช้แทนการอ้างอิงถึงคุณสมบัติสมาชิกและอนุญาตให้อ่านค่าจากอินสแตนซ์ได้
สรุปทบทวน: รีเฟล็กชันของ Kotlin
ชนิดข้อมูลสำคัญ:
KClass— เมทาดาทาของคลาส ตัวสร้าง และสมาชิกKFunction— การอ้างอิงที่เรียกใช้ได้ พารามิเตอร์ และการเรียกใช้KProperty1/KMutableProperty1— การอ้างอิงคุณสมบัติ การอ่านและการกำหนดค่า- ต้องมี
kotlin-reflectบนเส้นทางคลาส - แคชการอ้างอิงและหลีกเลี่ยงการใช้ในเส้นทางการทำงานที่มีความถี่สูง
คำถามที่พบบ่อย
บทเรียน “Reflection ของ Kotlin: KClass, KFunction, KProperty” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Reflection ของ Kotlin: KClass, KFunction, KProperty” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Reflection ของ Kotlin: KClass, KFunction, KProperty”
สำรวจข้อมูลเมตาของคลาสด้วย KClass และตรวจสอบสมาชิกด้วย reflection คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Reflection ของ Kotlin: KClass, KFunction, KProperty” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Reflection ของ Kotlin: KClass, KFunction, KProperty
- การสร้างและกำหนดเป้าหมายคำอธิบายประกอบแบบกำหนดเอง
- การอ่านคำอธิบายประกอบขณะรันไทม์
- การตรวจสอบและการจับคู่ด้วย Reflection