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);