我正在将一个类从 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':
// ??? …
Run Code Online (Sandbox Code Playgroud)