【问题标题】:How to Deserialize Jackson container with Generics Generically如何使用泛型反序列化 Jackson 容器
【发布时间】:2018-09-13 18:25:58
【问题描述】:

我有一个看起来像这样的方法的签名:

inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
    val type = jacksonTypeRef<RequestListWrapper<TData>>()
}

还有更多内容,但这是相关部分。我在一个内联函数中有一个重新定义的 T 。我的期望是,对于任何给定的调用,这里的 T 将是函数的实际 T,但它不是,它是 IBulkModel。

有没有办法使用 Kotlin 来完成这项工作,还是我被困在完整的课程中?

【问题讨论】:

  • 我不明白你的问题。您使用TData 作为泛型类型的名称,它扩展/实现IBulkModel,并作为泛型类型传递给RequestListWrapper。

标签: kotlin jackson deserialization


【解决方案1】:

嵌套类型参数丢失,即使在具体化参数中也是如此。唯一保留的类型是顶级类型。

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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2012-10-18
    • 2012-07-24
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多