Механизм, который вы ищете, называется «отражением» и позволяет анализировать объекты во время выполнения. Вы найдете много информации о 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
в качестве зависимости.