为什么 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
在'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