Java匿名类被坑记录,舒适惊喜,浪费我俩小时[-_-||]

本文记录了一次关于Java匿名类在使用MapUtil.getAny方法时遇到的问题,由于该方法内部使用getClass进行类型判断,导致匿名类实例的类型不匹配,从而返回了错误的结果。修复这个问题需要避免在实现中依赖于精确的类实例检查。
摘要由CSDN通过智能技术生成

Java匿名类被坑记录,舒适惊喜,浪费我俩小时[-_-||]

代码

  @Test
  void testMapGetAny() {
    Map<String, String> map = new HashMap<>();
    map.put("1", "1");
    map.put("12", "2");
    map.put("3", "3");
    map.put("4", "4");

    Map<String, String> res = MapUtil.getAny(map, new String[] { "1", "3" });
    log.debug(res.toString());

    Map<String, String> map2 = new HashMap<String, String>(){{
      put("1", "1");
      put("12", "2");
      put("3", "3");
      put("4", "4");
    }};

    Map<String, String> res2 = MapUtil.getAny(map2, new String[] { "1", "3" });
    log.debug(res2.toString());
  }

执行结果

可以看到匿名类的结果和原数组数一致的。
在这里插入图片描述

发生原因

在getAny方法的实现中使用了getClass进行类型判断,因为是匿名类,所以导致类型不匹配,使用了catch分支的逻辑,导致结果不正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值