Извлечение членов класса данных - PullRequest
1 голос
/ 14 января 2020

Мне нужно проверить, являются ли какие-либо переменные внутри моего класса данных пустыми. Для этого мне нужно сначала получить их, но я не могу получить к ним доступ напрямую (например, myDataClass.name), потому что мне нужно, чтобы он был generi c. Есть ли способ получить доступ к этим переменным без непосредственного присвоения им имен. Например, как доступ к члену массива (myArray [0]).

1 Ответ

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

Механизм, который вы ищете, называется «отражением» и позволяет анализировать объекты во время выполнения. Вы найдете много информации о inte rnet, но просто чтобы дать вам ссылку, вы можете проверить этот ответ .

В вашем случае вы могли бы сделать что-то вроде this:

data class MyDataClass(
    val first: String?,
    val second: String?,
    val third: Int?
)

fun main() {
    val a = MyDataClass("firstValue", "secondValue", 1)
    val b = MyDataClass("firstValue", null, null)

    printProperties(a)
    printProperties(b)
}

fun printProperties(target: MyDataClass) {
    val properties = target::class.memberProperties
    for (property in properties) {
        val value = property.getter.call(target)
        val propertyName = property.name
        println("$propertyName=$value")
    }
}

Обратите внимание, что для работы этого кода необходимо добавить пакет kotlin-reflect в качестве зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...