我正在尝试检索我的属性的实例,如下面的示例:
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的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)
}
}
我能够以一种非常不太美丽的方式解决它:
instance::class.memberProperties.forEach {
instance.javaClass.getMethod("get${it.name.capitalize()}").invoke(instance)
}