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做个后台,这个语言很多东西也不熟练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值