Kotlin:传递 Gson 使用的类型
Kotlin: passing a type to be used by Gson
我想编写一个函数,使用 Gson 将某个 JSON String
反序列化为某个类型的对象,然后 returns 该对象。
此类型可能是标准 Kotlin 类型(例如 Boolean
、String
等)、我的应用程序类型之一(例如 User
)或泛型类型(例如 HashMap<Int, Boolean>
).
此函数的一个非常简化的版本如下:
fun <T> get(jsonString: String, typeOfObj: /*type goes here. T???, typeOf???, etc*/): T? {
return gson?.fromJson(jsonString, typeOfObj)
}
我想通过 string 和 type 来调用它,我希望从反序列化中恢复过来,这方式:
val result: HashMap<Int, Boolean> = get(myString, Map<Int, Boolean>)
我尝试过使用 inline
和 reified
、KType
等,但我仍然卡住了,因为我对 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)
我想编写一个函数,使用 Gson 将某个 JSON String
反序列化为某个类型的对象,然后 returns 该对象。
此类型可能是标准 Kotlin 类型(例如 Boolean
、String
等)、我的应用程序类型之一(例如 User
)或泛型类型(例如 HashMap<Int, Boolean>
).
此函数的一个非常简化的版本如下:
fun <T> get(jsonString: String, typeOfObj: /*type goes here. T???, typeOf???, etc*/): T? {
return gson?.fromJson(jsonString, typeOfObj)
}
我想通过 string 和 type 来调用它,我希望从反序列化中恢复过来,这方式:
val result: HashMap<Int, Boolean> = get(myString, Map<Int, Boolean>)
我尝试过使用 inline
和 reified
、KType
等,但我仍然卡住了,因为我对 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)