Kotlin:传递 Gson 使用的类型

Kotlin: passing a type to be used by Gson

我想编写一个函数,使用 Gson 将某个 JSON String 反序列化为某个类型的对象,然后 returns 该对象。 此类型可能是标准 Kotlin 类型(例如 BooleanString 等)、我的应用程序类型之一(例如 User)或泛型类型(例如 HashMap<Int, Boolean>).

此函数的一个非常简化的版本如下:

fun <T> get(jsonString: String, typeOfObj: /*type goes here. T???, typeOf???, etc*/): T? {
    return gson?.fromJson(jsonString, typeOfObj)
}

我想通过 stringtype 来调用它,我希望从反序列化中恢​​复过来,这方式:

val result: HashMap<Int, Boolean> = get(myString, Map<Int, Boolean>)

我尝试过使用 inlinereifiedKType 等,但我仍然卡住了,因为我对 Kotlin 的类型系统和反射没有经验 API.

允许我以这种方式编写和调用此函数的参数类型是什么?

您可以使用这些内联函数:

inline fun <reified T> fromJson(json: String): T {
return Gson().fromJson(json, object: TypeToken<T>(){}.type)
}

下一个:

val result = Gson().fromJson<Result>(pref.result)

你也可以使用这些:

val turnsType = object : TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson<List<Turns>>(pref.turns, turnsType)