任何人都可以建議給出的代碼如何可能導致這樣的問題,偶爾ClassCastException
從數據解析文件。ArrayList包含錯誤的類型對象,沒有顯式的原始類型轉換
詳情:
我在超類中有一個泛型方法。
public T getItem(int position) {
return mItems.get(position); // mItems is an ArrayList
}
// corresponding setter
public void setItems(List<T> items) {
mItems = items;
notifyDataSetChanged();
}
它,然後在T = AdItem
如下子類中使用:
AdItem adItem = getItem(position);
一切工作正常,但我在上面提到的符合例外偶爾生產崩潰報告:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to .mypackage.AdItem
這明顯表明該列表包含LinkedTreeMap
而不是AdItem
列表是從JSON解析,該代碼是類型安全的,即無生型鑄造,未經檢查的警告等
是什麼情景ArrayList<AdItem>
包含LinkedTreeMap
對象運行?
除明確的未檢查/原始類型轉換爲Object
並返回ArrayList
,情況並非如此。
從文件解析JSON:
ArrayList<AdItem> tempList = gson.fromJson(jsonReader, typeToken.getType());
其中
typeToken = new TypeToken<ArrayList<AdItem>>() {};
所以tempList
應該只包含AdItem
。
任何人都可以解釋如何ClassCastException可能發生在上面的代碼?任何額外的細節將根據要求提供。
嘗試調試,右設置斷點的LinkedTreeMap進入你的名單後。希望你的IDE /調試器將允許創建這樣複雜的斷點。 –