Not enough information to infer type variable T, в Gson.fromJson()
Ошибка возникает в gson.fromJson
Ошибка : Not enough information to infer type variable T
Я не знаю как это можно исправить или изменить
class TestSaveLoad<T> {
val gson = Gson()
var jsonString: String = ""
fun load(): T {
val type = object : TypeToken<T>(){}.type
val obj = gson.fromJson(jsonString, type)
Log.e("TEST", "onStart: ${obj.toString()}")
return obj
}
fun save(t: T) {
jsonString = gson.toJson(t)
}
}
Ответы (2 шт):
Автор решения: дон луис
→ Ссылка
Не знаю насколько это правильно, но оно работает.
class TestSaveLoad<T>(var clazz: Class<T>) {
val gson = Gson()
var jsonString: String = ""
fun load():T {
val obj = gson.fromJson(jsonString, clazz)
return obj
}
fun save(t: T) {
jsonString = gson.toJson(t)
}
}
пример использование
val user = UserResponse(1, "dd", "ddd", "ddd")
val testSaveLoad = TestSaveLoad(UserResponse::class.java)
testSaveLoad.save(user)
val userResponse = testSaveLoad.load()
Log.e("TEST", "onStart: ${userResponse.idUser}")
Автор решения: Eugene Krivenja
→ Ссылка
В Котлине есть вот такой трюк
https://kotlinlang.org/docs/inline-functions.html#reified-type-parameters
Одно лишь ограничение - работает на уровне функции.
class TestSaveLoad {
val gson = Gson()
var jsonString: String = ""
inline fun <reified T> load(): T {
val obj = gson.fromJson(jsonString, T::class.java)
println("onStart: ${obj.toString()}")
return obj
}
fun <T> save(t: T) {
jsonString = gson.toJson(t)
}
}