0Pricing
Kotlin Academy · บทเรียน

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 constructors

KFunction: การอ้างอิงที่เรียกใช้ได้

ใช้ ::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.Int

KProperty: การอ้างอิงคุณสมบัติ

การอ้างอิงคุณสมบัติจะบันทึกคุณสมบัติไว้เป็นออบเจ็กต์ที่ใช้งานได้โดยตรง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Reflection ของ Kotlin: KClass, KFunction, KProperty
  2. การสร้างและกำหนดเป้าหมายคำอธิบายประกอบแบบกำหนดเอง
  3. การอ่านคำอธิบายประกอบขณะรันไทม์
  4. การตรวจสอบและการจับคู่ด้วย Reflection
← กลับไปที่ Kotlin Academy