我有一个方法签名,如下所示:
inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
val type = jacksonTypeRef<RequestListWrapper<TData>>()
}
还有更多内容,但这是相关的部分。我在内联函数中有一个精制的T。我的期望是,对于任何给定的调用,这里的T将是函数的实际T,但不是,它是IBulkModel。
有没有办法让Kotlin进行这项工作,还是我坚持不上完整的类(class)?
最佳答案
甚至在精化参数中,嵌套类型参数也会丢失。保留的唯一类型是顶级类型。
jackson 对此有一个解决方案。您可以从Java使用类型工厂:
data class Generic<T>(val t: T)
fun main(args: Array<String>)
{
val mapper = ObjectMapper()
val type: JavaType = mapper.typeFactory
.constructParametricType(Generic::class.java, Int::class.java)
val instance: Generic<Int> = mapper.readValue("""{"t":32}""", type)
}
关于kotlin - 如何一般地使用泛型反序列化Jackson容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319749/