如何创建一个以参数形式接收任何类型的类的函数?
我想打印传入参数及其值的类的字段
这是我的代码测试,但不起作用:
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)}")
}