JAVA 泛型 问题,请各位热心人帮忙,谢谢

msdner 2008-01-23 03:00:35
我需要这样的一个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");
因为这里出现了类型转换,这和泛型的思想是悖的。

对于此,大家有无解决的办法?谢谢。
...全文
155 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
olivesoup 2008-01-23
  • 打赏
  • 举报
回复
我曾经问过这个问题,里面已经讨论的很清楚了,你可以参考一下
http://topic.csdn.net/u/20071213/13/cec88600-5000-4d78-a41f-29fffd411b72.html

引用里面的结论:
研究了一下Collection下的class,竟发现有无数的安全警告,
看来这个问题连编写jdk的sun的技术者也无法解决,只能先这么摆着了。
老紫竹 2008-01-23
  • 打赏
  • 举报
回复
补充一下,你后面还有递归保存问题,我想你还是屏蔽掉算了,我的第二种写法无法保证n层递归不出现警告。

还是在方法的前面加上
@SuppressWarnings("unchecked")
public void myFunction(){
}
算了
老紫竹 2008-01-23
  • 打赏
  • 举报
回复
没有办法
1 泛型本身就是要求里面的内容必须是相同的对象数据类型,子类也可以
2 读取的时候,也是返回声明时的类型,即使当初存的是子类,如果返回子类也将产生异常,因为编译器无法保证每个对象都是子类
3 既然你那里是Object, 要转化为子类HashMap<String,Object> 当然会有异常了

解决方法
1 屏蔽掉这个异常,掩耳盗铃
2 把map 分成2部分,
map1 保存<String,Object>
map2 保存<String,Map<String,Map>>
费力不讨好

我本人一直使用第一种,毕竟代码没有逻辑错误,只不过是警告而已。我知道了,OK

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧