พื้นฐาน Reflection
ตรวจสอบชนิดข้อมูลขณะทำงาน
พื้นฐาน Reflection เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
รีเฟลกชันคืออะไร
รีเฟลกชันคือความสามารถของโปรแกรมในการตรวจสอบและจัดการโครงสร้างของตัวเองขณะทำงาน ได้แก่ คลาส พร็อพเพอร์ตี ฟังก์ชัน และแอนโนเทชัน
รีเฟลกชันของ Kotlin อยู่ในแพ็กเกจ kotlin.reflect และมี KClass เป็นศูนย์กลาง
การรับ KClass
ใช้ไวยากรณ์ ::class กับชนิดหรืออินสแตนซ์เพื่อรับออบเจ็กต์ KClass ของสิ่งนั้น
class Robot
fun main() {
val fromType = Robot::class
val fromInstance = Robot()::class
println(fromType.simpleName)
println(fromInstance.simpleName)
}ชื่อของคลาส
KClass มี simpleName และ qualifiedName ให้ใช้งาน ชื่อแบบมีคุณสมบัติครบถ้วนจะรวมเส้นทางของแพ็กเกจไว้ด้วย
class Engine
fun main() {
val k = Engine::class
println(k.simpleName)
println(k.qualifiedName)
}การตรวจสอบพร็อพเพอร์ตี
memberProperties จะแสดงรายการพร็อพเพอร์ตีของคลาส แต่ละรายการเป็น KProperty ซึ่งคุณสามารถสอบถาม name ได้
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
for (p in Point::class.memberProperties) {
println(p.name)
}
}การอ่านค่าพร็อพเพอร์ตี
KProperty1 สามารถเรียกใช้โดยส่งอินสแตนซ์ เพื่ออ่านค่าผ่าน get(instance)
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
val p = Point(3, 4)
for (prop in Point::class.memberProperties) {
println(prop.name + " = " + prop.get(p))
}
}การตรวจสอบฟังก์ชัน
memberFunctions จะส่งคืนฟังก์ชันที่เรียกใช้ได้ของคลาสในรูปออบเจ็กต์ KFunction คุณสามารถอ่าน name ของฟังก์ชันแต่ละรายการได้
import kotlin.reflect.full.memberFunctions
class Calculator {
fun add(a: Int, b: Int) = a + b
fun negate(a: Int) = -a
}
fun main() {
Calculator::class.memberFunctions
.filter { it.name in listOf("add", "negate") }
.forEach { println(it.name) }
}การอ้างอิงฟังก์ชัน
ไวยากรณ์ ::name จะสร้างการอ้างอิงที่เรียกใช้ได้ชนิด KFunction คุณสามารถเรียกใช้ภายหลังด้วย invoke หรือส่งต่ออ้างอิงนี้ได้
fun double(n: Int) = n * 2
fun main() {
val ref = ::double
println(ref.name)
println(ref.invoke(21))
}การสร้างอินสแตนซ์
createInstance() จะสร้างออบเจ็กต์ด้วยรีเฟลกชัน เมื่อคลาสมีคอนสตรัคเตอร์ที่ไม่รับอาร์กิวเมนต์
import kotlin.reflect.full.createInstance
class Widget {
override fun toString() = "Widget"
}
fun main() {
val w = Widget::class.createInstance()
println(w)
}การตรวจสอบคอนสตรัคเตอร์
constructors จะแสดงรายการคอนสตรัคเตอร์ของคลาส คุณสามารถตรวจสอบ parameters ของคอนสตรัคเตอร์เพื่อดูว่าต้องการอาร์กิวเมนต์ใดบ้าง
class Person(val name: String, val age: Int)
fun main() {
val ctor = Person::class.constructors.first()
ctor.parameters.forEach { println(it.name) }
}ต้นทุนและข้อควรระวัง
รีเฟลกชันมีประสิทธิภาพสูง แต่:
- ช้ากว่าการเรียกใช้โดยตรง
- ข้ามการตรวจสอบความปลอดภัยขณะคอมไพล์
- ต้องมีไลบรารี
kotlin-reflectบน JVM
ควรใช้กับเฟรมเวิร์กและเครื่องมือ ไม่ใช่ลูปที่ทำงานถี่
ชุดเครื่องมือรีเฟลกชัน
ชนิดสำคัญที่ควรจำ:
KClass— คลาสKProperty— พร็อพเพอร์ตีKFunction— ฟังก์ชันKParameter— พารามิเตอร์
เมื่อนำมารวมกัน ชนิดเหล่านี้ช่วยให้คุณอ่านโครงสร้างแบบไดนามิกได้
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับพื้นฐานรีเฟลกชันของคุณ
ทบทวน
คุณได้เรียนรู้พื้นฐานรีเฟลกชัน:
- รับ
KClassผ่าน::class - แสดงรายการ
memberPropertiesและmemberFunctions - อ่านค่าพร็อพเพอร์ตีและเรียกใช้การอ้างอิงฟังก์ชัน
- สร้างออบเจ็กต์ด้วย
createInstance()
ถัดไป: อ่านแอนโนเทชันแบบไดนามิก
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน Reflection” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน Reflection” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Reflection”
ตรวจสอบชนิดข้อมูลขณะทำงาน คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน Reflection” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ Annotation
- การกำหนด Annotation
- พื้นฐาน Reflection
- Reflection เชิงปฏิบัติ