我无法从自定义类(转)获得通用类型的列表:

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>>()

10-05 23:21