web-dev-qa-db-fra.com

seules les classes sont autorisées sur le côté gauche d'un littéral de classe

Je connais beaucoup de questions similaires ici dans StackOverflow, mais rien n'a résolu la mienne.

J'ai une classe de données générique:

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

J'essaie d'utiliser comme ceci:

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

IDE affiche une erreur: seules les classes sont autorisées sur le côté gauche d'un littéral de classe

Comment résoudre ça? Merci d'avance.

17
Bhuvanesh BS

Vous ne pouvez pas utiliser de génériques avec class, aussi facilement observable ici:

List<Int>::class.Java

Cela vous donne la même erreur. Pour utiliser le type générique dans la désérialisation GSON, faites ce qui est suggéré ici:

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

MODIFIER:

À Kotlin, cela ressemble à ceci:

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

Voici une petite preuve de concept, j'ai écrit:

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