为什么 class 成员 属性 在 Kotlin 中反射?

Why class member property reflection in Kotlin?

在'Kotlin in Action'中,它说“如果memberProperty指的是Personclass的年龄属性,memberProperty.get(person)是一种动态获取的方式person.age" 的值" with code(10.2.1 The Kotlin Reflection API):

class Peron(val name: String, val age: Int)
>> val person = Person("Alice", 29)
>> val memberProperty = Person::age
>> println(memberProperty.get(person))
29

我不明白为什么这个例子指的是“动态地”获取 属性 的值。当我 运行 这个代码时它才有效:

println(person.age)

成员属性反映还有其他案例或例子吗?

例如,假设您想编写一个函数来打印对象的所有属性及其值,您可以这样做:

inline fun <reified T: Any> T.printProperties() {
    T::class.memberProperties.forEach { property ->
        println("${property.name} = ${property.get(this)}") // You can't use `this.property` here
    }
}

用法:

data class Person(val firstName: String, val lastName: String)
data class Student(val graduate: Boolean, val rollNumber: Int)

fun main() {
    val person = Person("Johnny", "Depp")
    val student = Student(false, 12345)
    person.printProperties()
    student.printProperties()
}

输出:

firstName = Johnny
lastName = Depp
graduate = false
rollNumber = 12345