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

พื้นฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การใช้ Annotation
  2. การกำหนด Annotation
  3. พื้นฐาน Reflection
  4. Reflection เชิงปฏิบัติ
← กลับไปที่ Kotlin Academy