bug探索之路:List<Map>get取出元素却是String?
一、bug初现峥嵘
有一说一我定义的List<Map>
对吧,我get(0)
取出的元素也应该是Map
类型没问题吧。不行,编译器告诉我,java.lang.String cannot be cast to java.util.Map
。
这个意思就是说,你这个就是String
类型,你别想骗我它是Map
类型。
没办法嘛,你一个卑微程序猿罢了。你能干得过编译器?人家说啥就是啥吧。
二、用String声明接一下get(0)
的元素
离谱的一幕出现了,IDEA源码检查机制告诉你这个就是Map
,你别想虚晃一枪把他私自变成String
。
我现在有理由怀疑,你这个源码检查检查机制和编译器不是一家公司产的,你俩要不要对峙一下看看自己在说什么可以嘛?
要不你俩打一架?,反正我是受不了了。
三、解决方案:先强制转换成String
再用json解析成Map
我的诉求是取出data_list
这个List<Map>
里面的第一个Map
,然后找到这个Map
里面key为insind
对应的value.
String response=http_sevice.doPost(url,paramMap); Gson gson = new Gson(); Map<String, Object> map = new HashMap<String, Object>(); map = gson.fromJson(response, map.getClass());//关键 System.out.println(map); List<Map<String, Object>> data_list = (List<Map<String, Object>>) map.get("data"); try {// 当产生异常时,必须有处理方式。要么捕获,要么声明。 Map<String, Object> data = new HashMap<String, Object>(); data = gson.fromJson(String.valueOf(data_list.get(0)), data.getClass());//关键 String insind = String.valueOf(data.get("insind")); return insind; } catch (IndexOutOfBoundsException e) { return "-1"; } 复制代码
总结
说实话,这个我真的不知道该说什么了。我的脑子告诉我这是编译器和源码检查机制的问题,但是,理智想想这个java8编译器正常了多少年了,不可能有这么明显的bug。
所以这个问题可能是我触碰到了什么不为人知的小bug吧, 也希望各位如果如果看出有什么问题的可以评论指教。
我也是赶鸭子上架用的java
做个后台,这个语言很多东西也不熟练。
作者:DaveCui
链接:https://juejin.cn/post/7169851489383350303