2017-09-26 53 views
1

我知道這是基本的,許多人可以發現它是一個愚蠢的問題。但是,我對它的行爲很感興趣。Java中的怪異ClassCastException

我有需要List<String>的方法:

private WHT21940000Data populateObjectFromJsonList(List<String> subList) { 
    String s = subList.get(0); // problem line 
    // more code to follow... 
} 

現在,問題線在上面的片段如所示的,我提取值(這是1)從我List的。

現在,我的代碼,但上編譯運行時,它拋出異常如下:

Uncaught exception: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 

由於我使用generic形式的List<String>,我應該能夠從我的List<String>只檢索字符串。那爲什麼我會得到這個異常?

PS:下面是調用代碼: -

 List<List<String>> jsonConvertedList = mapper.readValue(json, List.class); 
     for (List<String> subList : jsonConvertedList) { 
     WHT21940000Data pojo = populateObjectFromJsonList(subList); 
     data.add(pojo); 
    } 

及以下json字符串輸入這是所有數據類型的混合:

[ 
    [1,21940000,1905386136,null,"KR","akshay","04/06/2017","03/06/2017",2017,9,40,"JPY",7478,"JPY",7478,"WHT (Residen",null,0,"03/06/2017","03/06/2017","20170604",null], 
    [2,21940000,1903732187,null,"KR",null,"06/06/2017","05/06/2017",2017,9,40,"JPY",608547485,"JPY",608547485,"WHT (Non-Resi",null,0,"05/06/2017","05/06/2017","20170606",null], 
    [3,21940000,2001898163, ............... ] 
. 
. 
. 
. 
. 
. 
. 
. 
] 
+1

我很確定答案會在你如何調用方法,你沒有顯示。我猜*是你在某處使用原始類型,而忽略了編譯器給你的警告。 –

+0

@JonSkeet:已添加調用代碼... –

+0

您正在傳遞一個'List',其中包含位置爲0的'Integer'類型的元素。當然,這很明顯嗎?解決的辦法是確保列表被指定爲'List '處處使用,並修復將導致的編譯器錯誤。 – EJP

回答

1

感謝喬恩斯基特的指點在上面的評論中。

通過你的關鍵註釋和引用在這裏:

「不要以爲包含非字符串值JSON只包含 字符串」

我必須使用Object代替String然後問題消失了:

List<List<Object>> jsonConvertedList = mapper.readValue(json, List.class);