くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Gson で List<*> なクラスをJsonからパースするときにシュッと処理してくれる拡張関数を書いた。

ソリューションはあるけど、拡張関数でシュッと解決してくれるものがググっても出てこなかったので書きました。

ソースコード

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

一番シュッと呼ぶとき

これがほんと好きなんですが、既存の関数と同じインターフェイスでシュッと呼べるようになってます。

このケースでは返り値の型が指定してある場合は型を推定してくれるので型引数を指定する必要すらないです。

fun hoge(): Huga{
val json = ""
val gson = Gson()
return gson.fromJson(
   json
)
}

GsonにList なものを渡してJsonをパースしようとすると内部的にgenericsは型消去されてしまうので、ちょっと工夫してみた。

inline 展開される代わりに型消去されないで書けるのでそれを利用してみた。

ヒントをくれたまつだんぱーさん Thx.