web-dev-qa-db-ja.com

クラスリテラルの左側ではクラスのみが許可されます

私はここ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にエラーが表示されます:クラスリテラルの左側にあるのはクラスのみです

これを解決するには?前もって感謝します。

17
Bhuvanesh BS

ここで簡単に確認できるように、classでジェネリックを使用することはできません。

List<Int>::class.Java

同じエラーが発生します。 GSON逆シリアル化で一般的なtypを使用するには、ここで提案されていることを実行します。

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)
22
s1m0nw1