Java中奇怪的ClassCastException

Java中奇怪的ClassCastException,java,generics,Java,Generics,我知道这是一个基本的问题,很多人会觉得这是一个愚蠢的问题。但是,我对它的行为很感兴趣 我有一个方法,它采用列表: 由于我使用的是List的generic形式,所以我应该只能从列表中检索字符串。那我为什么会得到这个例外呢 p.S.:下面是呼叫代码:- List<List<String>> jsonConvertedList = mapper.readValue(json, List.class); for (List<String> s

我知道这是一个基本的问题,很多人会觉得这是一个愚蠢的问题。但是,我对它的行为很感兴趣

我有一个方法,它采用
列表

由于我使用的是
List
generic
形式,所以我应该只能从
列表中检索字符串。那我为什么会得到这个例外呢

p.S.:下面是呼叫代码:-

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

感谢Jon Skeet在上述评论中的指导

您的主要评论如下,并在此处引用:


“不要假设包含非字符串值的JSON只包含 “字符串”

我必须使用
对象
而不是
字符串
,然后问题就消失了:

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

我很确定答案在于如何调用该方法,但您没有显示。我猜您正在某处使用原始类型,而忽略了编译器给您的警告。@JonSkeet:添加了调用代码…您正在传递一个
列表
,该列表在位置0处包含一个
Integer
类型的元素。这是显而易见的吗?解决方案是确保在使用列表的任何地方都将其指定为
list
,并修复将导致的编译器错误
是问题所在-
列表。class
是原始类型,我怀疑它正在用非字符串填充列表。如果你能提供帮助,那就更容易了。仅仅因为您已强制转换到
列表
并不意味着它只包含字符串-您应该阅读Java泛型类型擦除。不要假设包含非字符串值的JSON只包含字符串。。。
     List<List<String>> jsonConvertedList = mapper.readValue(json, List.class);
        for (List<String> subList : jsonConvertedList) {
        WHT21940000Data pojo = populateObjectFromJsonList(subList);
        data.add(pojo);
     }
[
    [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, ............... ]
.
.
.
.
.
.
.
.
]
List<List<Object>> jsonConvertedList = mapper.readValue(json, List.class);