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())); } }
}