не может получить доступ к '<init>', это 'public / * package * /' в 'TypeToken'

ю много подобных вопросов здесь, в 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 показывает ошибку:только классы разрешены в левой части литерала класса

Как это решить? Заранее спасибо.

 Bhuvanesh BS25 сент. 2017 г., 11:14
Я ценю твой отрицательный голос. Мне действительно нужна помощь. Пожалуйста, напишите причину или отправьте решение

Ответы на вопрос(1)

Решение Вопроса

Вы не можете использовать дженерики сclass, как легко заметить здесь:

List<Int>::class.java

Это дает вам ту же ошибку. Чтобы использовать универсальный тип в десериализации GSON, сделайте то, что предлагается здесь:

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

РЕДАКТИРОВАТЬ:

В Котлине это выглядит так:

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)
 Bhuvanesh BS25 сент. 2017 г., 12:06
не может получить доступ к '<init>', это 'public / * package * /' в 'TypeToken'
 s1m0nw125 сент. 2017 г., 12:02
Не могли бы вы поделиться ошибкой тогда?
 Bhuvanesh BS25 сент. 2017 г., 11:49
Спасибо, но вы можете увидеть мой класс данных? Я должен передать тип результата.
 s1m0nw125 сент. 2017 г., 11:52
Конечно, смотрите мое редактирование
 Bhuvanesh BS25 сент. 2017 г., 12:02
Не работает.....

Ваш ответ на вопрос