1. 程式人生 > >異常com.google.gson.internal.StringMap cannot cast to..原因&解決方案

異常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; }
  • 呼叫方式
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);