Котлин: конвертировать карту в любой объект - PullRequest
0 голосов
/ 05 октября 2018

Я хочу преобразовать изменяемую карту в любой объект.Например:

    Val map = mutableMapOf("name" to "michael", "age" to "12")

Var user = map.toObject //Any Object i want

And :

Print((user as User).name)
//output michael
Print((user as User).age)
//output 12


Class User(val name, val age){

}

, потому что я создаю обобщенную функцию.каким образом это сделать?

1 Ответ

0 голосов
/ 25 июля 2019

Вы можете сделать это с помощью Gson, сериализовав карту в json, а затем десериализовав json для любого объекта.Здесь показано преобразование в обоих направлениях:

val gson = Gson()

//convert a map to a data class
inline fun <reified T> Map<String, Any>.toDataClass(): T {
    return convert()
}

//convert a data class to a map
fun <T> T.serializeToMap(): Map<String, Any> {
    return convert()
}

//convert an object of type I to type O
inline fun <I, reified O> I.convert(): O {
    val json = gson.toJson(this)
    return gson.fromJson(json, object : TypeToken<O>() {}.type)
}

См. Аналогичный вопрос здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...