Kotlin数据类:如果我在编译时不知道属性的名称,如何读取属性的值?

2024-02-02

如果属性名称仅在运行时已知,如何读取 Kotlin 数据类实例中的属性值?


这是一个函数,用于从给定属性名称的类实例中读取属性(如果未找到属性,则抛出异常,但您可以更改该行为):

import kotlin.reflect.KProperty1
import kotlin.reflect.full.memberProperties

@Suppress("UNCHECKED_CAST")
fun <R> readInstanceProperty(instance: Any, propertyName: String): R {
    val property = instance::class.members
                     // don't cast here to <Any, R>, it would succeed silently 
                     .first { it.name == propertyName } as KProperty1<Any, *> 
    // force a invalid cast exception if incorrect type here
    return property.get(instance) as R  
}

构建.gradle.kts

dependencies {
    implementation(kotlin("reflect"))
}

Using

// some data class
data class MyData(val name: String, val age: Int)
val sample = MyData("Fred", 33)

// and reading property "name" from an instance...
val name: String = readInstanceProperty(sample, "name")

// and reading property "age" placing the type on the function call...
val age = readInstanceProperty<Int>(sample, "age")

println(name) // Fred
println(age)  // 33
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin数据类:如果我在编译时不知道属性的名称,如何读取属性的值? 的相关文章

随机推荐