Kotlin传递KType作为泛型参数
我有一种情况,我想调用一个函数来生成一个类型为的对象,我只有一个KType描述 基本上,我有:Kotlin传递KType作为泛型参数,kotlin,reflection,Kotlin,Reflection,我有一种情况,我想调用一个函数来生成一个类型为的对象,我只有一个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 = mut
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)
}
内联函数(from:String):T=//好的,老实说,这是一个JSON解析器
...
趣味myOtherFunction(foo:KCallable):MyReturnType{
val args=mutableMapOf()
...
for(foo.parameters中的参数){
...
val argValue=coolFunction(someStringIhave)
args[parameter.name]=argValue
}
...
返回foo.callBy(args)
}
问题当然是
coolFunction(someStringIhave)
的语法不正确。虽然我不知道如何获得正确的语法,但我想我必须使用一些更具反射性的API,但我似乎不知道如何使用。您应该更改coolFunction
以获得参数。它不能用泛型函数完成。不幸的是,您没有为coolFunction
提供代码,我也无法帮助您实现它,但是如果您想这样做,您应该传递类,而不是使用泛型。如果在酷函数中调用其他通用函数,请将它们全部更改。传递参数并在cool函数中处理它。你不能这么说,没有办法。你必须更改签名
另外,您的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)
}
fun-coolFunction(from:String,param:KParameter){}//好吧,老实说,这是一个JSON解析器
趣味myOtherFunction(foo:KCallable):MyReturnType{
val args=mutableMapOf()
for(foo.parameters中的参数){
val argValue=coolFunction(“someStringIhave”,参数)
args[参数]=argValue
}
返回foo.callBy(args)
}
问题更多地与第一个函数有关。如果类类型没有参数,它怎么可能返回T,除非您使用具体化类型?对不起,您是对的,它是具体化的。我仍然不知道如何正确地称呼它。我特别使用了Json.decodeFromString
函数。谢谢。coolFunction
是kotlinx序列化JSON解析器。我切换到Gson,它有一个带有更合适签名的函数。我试图避免额外的依赖项,但目前看来这是kotlinx json反序列化程序的一个缺点