我无法从自定义类 (Turns) 中获取泛型类型列表:
val turnsType = TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson(pref.turns, turnsType)
它说:
cannot access '<init>' it is 'public /*package*/' in 'TypeToken'
最佳答案
创建这个内联乐趣:
inline fun <reified T> Gson.fromJson(json: String) = fromJson<T>(json, object: TypeToken<T>() {}.type)
然后就可以这样调用了:
val turns = Gson().fromJson<Turns>(pref.turns)
// or
val turns: Turns = Gson().fromJson(pref.turns)
以前的替代品:
备选方案 1:
val turnsType = object : TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson<List<Turns>>(pref.turns, turnsType)
你必须把 object :
以及 fromJson<List<Turns>>
中的具体类型
备选方案 2:
正如@cypressious 提到的,它也可以通过这种方式实现:
inline fun <reified T> genericType() = object: TypeToken<T>() {}.type
用作:
val turnsType = genericType<List<Turns>>()
https://stackoverflow.com/questions/33381384/