中所周知,Java中的泛型并不像C++、C#一样是真正的泛型,其泛型是通过类型擦除来实现的。具体什么是类型擦除,可以参看这篇博文:http://icyfenix.iteye.com/blog/1021949。今天要记录的是在实际开发中遇到的一个,由于Java这种泛型的实现方式而导致的问题,及解决办法。
一下代码是模拟真实开发环境下的实现:
1 @Test 2 public void test(){ 3 // 构建searchMap,模拟前端传来的查询参数 4 Map<String, Object> searchMap = new HashMap<String, Object>(); 5 List<Integer> goodsIds1 = new ArrayList<Integer>(); 6 goodsIds1.add(1); 7 goodsIds1.add(2); 8 goodsIds1.add(3); 9 searchMap.put("goodsIds", goodsIds1);10 searchMap.put("goodsType", 1); 11 12 // 利用searchMap进行查询,模拟后端的逻辑13 List<Long> goodsIds2 = (List<Long>)searchMap.get("goodsIds");14 for(Long goodsId : goodsIds2){15 System.out.println(goodsId);16 }17 &