Получите доступ к class.field_1, объединив его имя свойства со строкой "field_" и "1" - PullRequest
0 голосов
/ 01 августа 2020

Предположим, у меня есть класс данных Foo со свойствами типа:

field_1
field_2
....
field_10

Объект этого класса был создан как

val foo = Foo(1, 2,...10)

По какой-то причине я хочу получить доступ в свойства, используя что-то вроде этого:

//here is correct
val fieldNumber = someFunToCalculateFieldNumber()
val combinedFooField = "field_$fieldNumber"

//here is wrong
val value = foo.combinedFooField

Есть ли способ сделать это?

1 Ответ

1 голос
/ 01 августа 2020

вам необходимо использовать Kotlin модуль отражения

из:

https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect/1.4.0-rc

 <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-reflect</artifactId>
        <version>1.4.0-rc</version>
        <scope>runtime</scope>
 </dependency>

затем:

package org.example

data class Hello(val a: Int, val b: Int, val c: Int, val d: Int) {
    fun getFields() = Hello::class.java.declaredFields.withIndex().map {
        "${it.index},${it.value.name}"
    }
}

fun main(args: Array<String>) {
   val h = Hello(1,2,3,4)
    for (field in h.getFields()) {
        println(field)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...