異常com.google.gson.internal.StringMap cannot cast to..原因&解決方案
阿新 • • 發佈:2019-02-02
異常資訊
java.lang.ClassCastException: com.google.gson.internal.StringMap cannot cast to…
異常描述
期望使用一個方法將JsonArray字串轉換為物件List,方法執行結束後,結果List中的物件不能識別為傳入的T物件型別,而是識別為一個Map導致後續出錯。
方法如下
public static <T> List<T> getListFromJSON(String str, Class<T> type) {
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> list = new Gson().fromJson(str, listType);
return list;
}
- 呼叫方式
List<Work> works = getListFromJSON(workJsonString, Work.class);
異常原因
- 作為方法傳入引數,Java編譯過程會將泛型物件型別擦除。
解決方案
方案1
- 直接copy方法內程式碼直接使用,而不通過方法傳入
方案2
- 方法如下
public static <T> List<T> stringToArray(String s, Class<T[]> clazz) {
T[] arr = new Gson().fromJson(s, clazz);
return Arrays.asList(arr);
}
- 呼叫方式
List<Work> works = stringToArray(workgson, Work[].class);