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分支的逻辑,导致结果不正常。