【问题标题】:only classes are allowed on the left hand side of a class literal类文字的左侧只允许类
【发布时间】:2018-03-06 04:20:38
【问题描述】:

我在 StackOverflow 中知道很多类似的问题,但没有解决我的问题。

我有一个通用数据类:

  data class ServiceCall<out T>(val result: T?, val exception: String?, val pagination: String?, val stringResult: String?)

我正在尝试这样使用:

Gson().fromJson(json, ServiceCall<SurveyListModel>::class.java).result

IDE 显示错误:类文字的左侧只允许使用类

如何解决这个问题?提前致谢。

【问题讨论】:

  • 感谢您的反对。我真的需要帮助。请发表原因或发表解决方案

标签: android generics gson kotlin data-class


【解决方案1】:

您不能将泛型与class 一起使用,这在此处很容易观察到:

List<Int>::class.java

它给你同样的错误。要在 GSON 反序列化中使用泛型类型,请执行此处建议的操作:

https://stackoverflow.com/a/5554296/8073652

编辑:

在 Kotlin 中是这样的:

val type: Type = object : TypeToken<ServiceCall<SurveyListModel>>() {}.type 
Gson().fromJson<ServiceCall<SurveyListModel>>(json, type).result

这是我写的一个小概念证明:

 class Token : TypeToken<List<Int>>()
 val x: List<Int> = Gson().fromJson(Gson().toJson(arrayOf(1)), Token().type)
 println(x)

【讨论】:

  • 谢谢,但是你能看到我的数据类吗?我必须传递结果类型。
  • 无法访问 '' 它是 'T​​ypeToken' 中的 'public /*package*/'
  • class Token : TypeToken&lt;ServiceCall&lt;SurveyListModel&gt;&gt;(); Gson().fromJson(json, Token().type)
  • 感谢您的帮助:)
  • 很高兴我能帮上忙
【解决方案2】:

如果有人在 Kotlin 和 Jackson 中寻找答案。

val response = ObjectMapper().convertValue(dataObject, object: TypeReference<Map<String, Any>>(){})

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2012-08-14
    • 2015-09-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2019-08-16
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多