Kotlin反映:获取成员属性的实例

问题描述 投票:0回答:2

我正在尝试检索我的属性的实例,如下面的示例:

data class DataClass(
    val inner: InnerClass
)

data class AnotherDataClass(
    val annotatedProperty: String,
    val dataClass: DataClass
)


instance = AnotherDataClass("prop", DataClass("anotherprop"))

instance::class.memberProperties.forEach {
    // how to retrieve the instance of the properties here?
}
kotlin reflection
2个回答
1
投票

使用kotlin的kClass访问属性。当您遍历属性时,可以检查属性的类型,如果实际上是DataClass类型,则将其强制转换为DataClass并照常访问其值。

 var instance = AnotherDataClass("prop", DataClass("AnotherProperty"))
    instance.javaClass.kotlin.memberProperties.forEach{
        var propertyValue = it.get(instance)
        when(propertyValue){
            // if propertyValue is of DataClass then
            // access its internal fields as you like
            is DataClass -> println(propertyValue.inner)
            else -> println(propertyValue)
        }
    }

0
投票

我能够以一种非常不太美丽的方式解决它:

instance::class.memberProperties.forEach {
   instance.javaClass.getMethod("get${it.name.capitalize()}").invoke(instance)
}
© www.soinside.com 2019 - 2024. All rights reserved.