Kotlin: передача типа, который будет использоваться Gson - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу написать функцию, которая десериализует определенный JSON String в объект определенного типа, используя Gson, и возвращает этот объект. Этот тип может быть стандартным Kotlin типом (таким как Boolean, String, et c), одним из типов моего приложения (скажем, User) или универсальным c типом (таким как HashMap<Int, Boolean>).

Очень упрощенная версия этой функции будет выглядеть следующим образом:

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

Я бы хотел назвать ее, передав ей строку , и типа Я ожидаю, что вернусь от десериализации этого, следующим образом:

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

Я пытался использовать inline и reified, KType и др. c, но я все еще застрял, потому что у меня нет опыта работы с Kotlin системой типов и API отражения.

Какой тип параметра позволит мне написать и вызвать эту функцию следующим образом способ

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете использовать следующие встроенные функции:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...