如何创建一个以参数形式接收任何类型的类的函数?

我想打印传入参数及其值的类的字段
这是我的代码测试,但不起作用:

fun saveInPreference(klass: Any) {
    for (prop in klass::class.memberProperties) {
        println("${prop.name}") //Print field name of the class
        println("${prop.name} = ${prop.get(prop.name)}") // Error not work, not get value of fields
    }

}

谢谢

最佳答案

好吧,您所使用的API的类型安全性仅比用例所需的类型安全性高一点。实际上,您从prop获得的memberProperties的类型是out投影的类型,因此您不能仅传递从其获得的类型的实例而不捕获该类型。有关说明,请参见this Q&A

对于您的用例,使用类型安全性较低的API,用call(obj)而不是get(obj)就足够了:

for (prop in klass::class.memberProperties) {
    /* ... */
    println("${prop.name} = ${prop.call(prop.name)}")
}

10-07 19:47
查看更多