阅读 59

bug探索之路:List<Map>get取出元素却是String?

一、bug初现峥嵘

image.png

有一说一我定义的List<Map>对吧,我get(0)取出的元素也应该是Map类型没问题吧。不行,编译器告诉我,java.lang.String cannot be cast to java.util.Map

这个意思就是说,你这个就是String类型,你别想骗我它是Map类型。

没办法嘛,你一个卑微程序猿罢了。你能干得过编译器?人家说啥就是啥吧。

二、用String声明接一下get(0)的元素

image.png

离谱的一幕出现了,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

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐