Gson 解析小技巧

解析 List 的時候官方的使用:

List<Dim> dims=gson.fromJson(json,new TypeToken<List<Dim>>(){}.getType());

使用TypeToken 匿名內(nèi)部類的方式.獲取到匿名內(nèi)部類定義的泛型.

當(dāng)我們封裝一個工具類的時候,解析 List 的時候不可避免要傳遞一個 TypeToken 匿名內(nèi)部類的進(jìn)來.
有什么辦法只傳遞Dim 而不用寫很長的 TypeToken 呢?
方式其實很簡單,就是為 Gson 構(gòu)造一個正確的 Type 給它.

TypeFactory是一個工具類簡單封裝.



/**
 * Created by dim on 16/5/27.
 */
public class TypeFactory {

    public static Type $List(Type type) {
        return $Gson$Types.newParameterizedTypeWithOwner(null, List.class, type);
    }

    public static Type $Set(Type type) {
        return $Gson$Types.newParameterizedTypeWithOwner(null, Set.class, type);
    }

    public static Type $HashMap(Type type, Type type2) {
        return $Gson$Types.newParameterizedTypeWithOwner(null, HashMap.class, type, type2);
    }

    public static Type $Map(Type type, Type type2) {
        return $Gson$Types.newParameterizedTypeWithOwner(null, Map.class, type, type2);
    }

    public static Type $Parameterized(Type ownerType, Type rawType, Type... typeArguments) {
        return $Gson$Types.newParameterizedTypeWithOwner(ownerType, rawType, typeArguments);
    }

    public static Type $Array(Type type) {
        return $Gson$Types.arrayOf(type);
    }

    public static Type $SubtypeOf(Type type) {
        return $Gson$Types.subtypeOf(type);
    }

    public static Type $SupertypeOf(Type type) {
        return $Gson$Types.supertypeOf(type);
    }
}

使用:

List<Dim> dims = gson.fromJson(json, TypeFactory.$List(Dim.class));

再使用靜態(tài)導(dǎo)入方法:

import static com.dim.TypeFactory.*;
...

List<Dim> dims = gson.fromJson(json, $List(Dim.class));
...

一些復(fù)雜的泛型


List<Dim> dims = gson.fromJson(json, $List(Dim.class));
List<List<Dim>> dimss= gson.fromJson(json,$List($List(Dim.class)));
Dim[] dimArray=gson.fromJson(json,$Array(Dim.class));
Set<Dim> dimSet=gson.fromJson(json,$Set(Dim.class));
Map<String,Dim> dimMap=gson.fromJson(json,$Map(String.class,Dim.class));
Map<String,List<Dim>> dimsMap=gson.fromJson(json,$Map(String.class,$List(Dim.class)));


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容