我正在将一个Java类移植到Kotlin。这个类声明了数百个对象,每个对象都有一个名称属性,该属性与对象的声明变量名称相同。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
的函数。