kotlin - Kotlin 将 KType 作为泛型参数传递
问题描述
我有一种情况,我想调用一个函数来生成一个我只有 KType 描述的类型的对象。
基本上我有:
inline fun<reified T> coolFunction(from : String) : T = // Okay, I'll be honest - its a JSON parser
...
fun myOtherFunction(foo : KCallable<MyReturnType>) : MyReturnType {
val args = mutableMapOf<KParameter, Any?>()
...
for (parameter in foo.parameters) {
...
val argValue = coolFunction<parameter.type>(someStringIhave)
args[parameter.name] = argValue
}
...
return foo.callBy(args)
}
问题当然coolFunction<parameter.type>(someStringIhave)
是语法不正确。虽然我不知道如何获得正确的语法,但我认为我将不得不使用一些更具反射性的 API,但我似乎无法弄清楚如何。
解决方案
您应该更改您coolFunction
的参数以获取参数。它不能用通用函数来完成。不幸的是,你没有为你提供代码coolFunction
,我无法帮助你实现它,但如果你想这样做,你应该传递类而不是使用泛型。如果您在酷函数中调用其他通用函数,请全部更改。传递参数并在你的酷函数中处理它。你不能这样称呼它,没有办法。您必须更改签名。
另外,你args
错了。键应该是参数,而不是它们的名称。我纠正了它。
fun coolFunction(from: String, param: KParameter) {} // Okay, I'll be honest - its a JSON parser
fun myOtherFunction(foo : KCallable<String>) : MyReturnType {
val args = mutableMapOf<KParameter, Any?>()
for (parameter in foo.parameters) {
val argValue = coolFunction("someStringIhave", parameter)
args[parameter] = argValue
}
return foo.callBy(args)
}
推荐阅读
- javascript - 如何使用 Tampermonkey 复制 href / 链接
- java - 依赖冲突,无法找到解决该问题的 jar
- python-3.x - 下载python库创建部署包
- replace - 带有属性的 MS Visio 形状名称
- python - 更改多处理的序列化协议(Windows)
- google-maps - 谷歌地图:ReferenceError:谷歌未在科尔多瓦安卓应用程序中定义
- typescript - Azure devops TS build 失败:'类型'false'不可分配给类型'Date':但类型定义为'Date | boolean' 并在本地构建工作
- php - 正则表达式匹配所有引号,但当行以斜杠开头时不匹配
- python - 如何将统计结果转换为python烧瓶中的百分比
- swift - 移动到另一个VC时如何让搜索栏立即消失