天天看點

異常com.google.gson.internal.StringMap cannot cast to..原因&解決方案

異常資訊

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;
}
           
  • 調用方式

異常原因

  • 作為方法傳入參數,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);
        }
           
  • 調用方式