gpt4 book ai didi

Kotlin 将 KType 作为泛型参数传递

转载 作者:行者123 更新时间:2023-12-02 13:25:45 25 4
gpt4 key购买 nike

我有一种情况,我想调用一个函数来生成一个我只有 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)
}

关于Kotlin 将 KType 作为泛型参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64095713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com