Используя рефлексию, вам не нужно самостоятельно сопоставлять тип и свойство.
Функция-член propertyValue()
вернет значение первого свойства, которое имеет тип универсального параметра или null
.
class Foo {
val a: String = "bar"
val b: Int = 111
inline fun <reified T> propertyValue() = Foo::class.memberProperties.firstOrNull {
it.returnType == T::class.createType()
}?.get(this)
}
Foo().propertyValue<Int>()) // 111
Foo().propertyValue<String>()) // bar
Foo().propertyValue<Double>()) // null
Конечно, вы можете расширить эту функцию, чтобы она давала вам значения всех свойств нужного типа T
(например, если у вас несколько Int
свойств).