Kotlin:具有通用参数类的函数

时间:2018-10-04 20:10:35

标签: android kotlin

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

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

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
    }

}

谢谢

1 个答案:

答案 0 :(得分:3)

好吧,您所使用的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)}") 
}