使用Gson處理解析泛型類型對象

Gson處理解析泛型類型對象,直接在泛型當前類獲取泛型的類型

public abstract class CallBack<T> {

//獲取解析傳遞過來的泛型類型(在泛型當前類中獲取)

     public Type getType() {
            ParameterizedType genType = (ParameterizedType) getClass().getGenericSuperclass();

            Type[] actualTypeArguments = ((ParameterizedType) genType).getActualTypeArguments();

            return actualTypeArguments[0];
      }

     public abstract void onSuccess(T result);

    @Override
    public void onSuccess(String responseInfo,int stateCode) {
        Gson gson = new Gson();
        try {
            if (stateCode == 200) {

                Type type = getType();

                if (type == String.class) {
                    onSuccess((T) responseInfo);

                } else if (type == List.class) {
                        //list沒有指定泛型類型的
                      onSuccess((T) gson.fromJson(responseInfo, type));
                } else if (type == Map.class) {
                         //map沒有指定泛型類型的
			onSuccess((T) gson.fromJson(responseInfo, type));
                } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getActualTypeArguments().length == 1) {
                   
                         //List指定泛型類型的
			 onSuccess((T) gson.fromJson(responseInfo, type));
                } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getActualTypeArguments().length == 2) {
                        //map指定泛型類型的
			onSuccess((T) gson.fromJson(result, type));
                } else {
		    //其它單個對象類型
                    onSuccess((T) gson.fromJson(responseInfo, type));
                }


            } else {
                onFailure(new HttpException());
            }
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
            onFailure(new HttpException(e.getMessage()));
        }
    }

}

發佈了49 篇原創文章 · 獲贊 17 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章