Kotlin отражение: получить экземпляр свойства члена - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь получить экземпляры моих свойств, как в примере ниже:

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?
}

Ответы [ 2 ]

1 голос
/ 15 января 2020

Используйте 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 голосов
/ 15 января 2020

Я смог решить ее не очень красиво:

instance::class.memberProperties.forEach {
   instance.javaClass.getMethod("get${it.name.capitalize()}").invoke(instance)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...