相关疑难解决方法(0)

如何使用 Kotlin 反射更改成员字段?

我正在将一个类从 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)

reflection kotlin

6
推荐指数
1
解决办法
5264
查看次数

标签 统计

kotlin ×1

reflection ×1