我有一个方法签名,如下所示:
inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
val type = jacksonTypeRef<RequestListWrapper<TData>>()
}
还有更多,但这是相关的部分。我在内联函数中有一个精制的T。我的期望是,对于任何给定的调用,这里的T将是函数的实际T,但不是,它是IBulkModel。
有没有办法让Kotlin做到这一点,还是我会坚持通过完整的课程?
答案 0 :(得分:0)
嵌套类型的参数即使在经过修饰的参数中也会丢失。保留的唯一类型是顶级类型。
杰克逊对此有一个解决方案;您可以从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)
}