【发布时间】:2018-06-20 13:55:31
【问题描述】:
我正在将一个类从 Java 移植到 Kotlin。这个类声明了数百个对象。每个对象都有一个 name 属性,该属性与对象声明的变量名相同。 Java 反射允许通过反射使用声明的名称来设置对象成员name。只需在数百个构造函数中保存一个参数。
我尝试在 Kotlin 中做同样的事情,但不知道如何进行属性设置。下面是一些简化的测试代码:
import kotlin.reflect.full.companionObject
import kotlin.reflect.full.declaredMemberProperties
class MyTestObject() {
var name: String = "NotInitialized"
companion object {
val Anton = MyTestObject()
val Berta = MyTestObject()
val Caesar = MyTestObject()
}
}
fun main(args : Array<String>) {
println(MyTestObject.Anton.name) // name not yet initialized
// Initialize 'name' with the variable name of the object:
for (member in MyTestObject::class.companionObject!!.declaredMemberProperties) {
if (member.returnType.toString() == "myPackage.MyTestObject") {
println("$member: ${member.name}")
// Set 'name' property to 'member.name':
// ???
}
}
println(MyTestObject.Anton.name) // now with the initialized name
}
??? 行是我想要访问MyTestObject 的name 属性以将其设置为member.name 的位置。我正在寻找类似于(member.toObject() as MyTestObject).name = member.name的函数。
【问题讨论】:
标签: reflection kotlin