我需要这样的一个Map:name一律只能为String,而value既可以为String也可以是Map,一直递归下去。现在,我是这样声明的:
Map <String,   Object>   map   =   new   HashMap <String,   Object> ();开始设值:
map.put("a",   "aa");
map.put("b",     new   HashMap <String,   Object> ());以上都没问题,但是,当我要取值时,编译器出现了警告:
(HashMap <String,   Object> ())map.get("b");
因为这里出现了类型转换,这和泛型的思想是悖的。对于此,大家有无解决的办法?谢谢。

解决方案 »

  1.   

    没有办法
    1 泛型本身就是要求里面的内容必须是相同的对象数据类型,子类也可以
    2 读取的时候,也是返回声明时的类型,即使当初存的是子类,如果返回子类也将产生异常,因为编译器无法保证每个对象都是子类
    3 既然你那里是Object, 要转化为子类HashMap<String,Object> 当然会有异常了解决方法
    1 屏蔽掉这个异常,掩耳盗铃
    2 把map 分成2部分,
    map1 保存<String,Object> 
    map2 保存<String,Map<String,Map>>
    费力不讨好我本人一直使用第一种,毕竟代码没有逻辑错误,只不过是警告而已。我知道了,OK
      

  2.   

    补充一下,你后面还有递归保存问题,我想你还是屏蔽掉算了,我的第二种写法无法保证n层递归不出现警告。还是在方法的前面加上
    @SuppressWarnings("unchecked")
    public void myFunction(){
    }算了
      

  3.   

    我曾经问过这个问题,里面已经讨论的很清楚了,你可以参考一下
    http://topic.csdn.net/u/20071213/13/cec88600-5000-4d78-a41f-29fffd411b72.html引用里面的结论:
    研究了一下Collection下的class,竟发现有无数的安全警告, 
    看来这个问题连编写jdk的sun的技术者也无法解决,只能先这么摆着了。