java map两个疑问!

weidu23 2014-03-25 09:32:29
要写毕业设计了,我今天看是动手,但是,写着写着,碰到了map的问题,疑惑不解,特来求教:
-------------
问题1 > 情景、
假定我自定义了一个map作为存储器,定义如下:Map< String, Map<String,List<?>> > storage = new ... .
那么,我传入的<K,V>只能是String 和Map<String,List<?>>。
此时,出问题了,
V对应的是Map<String,List<?>>,我随便输入一个storage.put("test", new HashMap<String, List<Object>>());//报错!!!
---------------
我原本以为,?作为通配符,可以随便录入,结果在这里,即便是Object都不能对应!!!
问题1 > 提问、
1、为什么 ? 2、碰到这种设计,怎么传参 ?

问题2:由于问题太多,请此处查看问题2,谢谢: http://bbs.csdn.net/topics/390742200
...全文
1012 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kosora曹 2014-04-16
  • 打赏
  • 举报
回复
遇到"Map< String, Map<String,List<?>> >"这种坑爹的代码,我只能说:你设计错了。
weidu23 2014-04-14
  • 打赏
  • 举报
回复
引用 4 楼 zweichxu 的回复:
这样没问题,但是无意义。最小单元(list)里存的类型不定,用的时候容易发生类型错误,还不如针对具体类型设置不同的存储容器(多个存储容器)
意义是有的 ! 比如,我要存储的数据室 ? ,但是?可能是多个的,而不是单一的,所以是List<?> , 此时,List<?>是需要索引的,所以我定义了map<String,List<?>> , 我称它为 infoMap 。 而与此同时,如果我有多个不同性质的数据,但是这些数据要存储的信息恰好是infoMap , 比如 <学校,院系<院系id,List<学生>> > 所以我定义了一个map<String,infoMap> ,也就是map<String , map<String , List<?>>>
weidu23 2014-04-14
  • 打赏
  • 举报
回复
引用 5 楼 kjmiou 的回复:
Map<String,List >
这样不可 ......
weidu23 2014-04-14
  • 打赏
  • 举报
回复
引用 3 楼 zweichxu 的回复:
Map< String, Map<String,List<?>> > storage = new HashMap<String, Map<String,List<?>>>(); Map<String,List<?>> value = new HashMap<String, List<?>>(); List<Object> list = new ArrayList<Object>(); list.add("a"); list.add(1); value.put("key", list); storage.put("test", value); 这样没问题,仔细 体会一下
的确 .....
旷逍遥 2014-03-26
  • 打赏
  • 举报
回复
Map<String,List >
写代码的农民 2014-03-25
  • 打赏
  • 举报
回复
引用 3 楼 zweichxu 的回复:
Map< String, Map<String,List<?>> > storage = new HashMap<String, Map<String,List<?>>>(); Map<String,List<?>> value = new HashMap<String, List<?>>(); List<Object> list = new ArrayList<Object>(); list.add("a"); list.add(1); value.put("key", list); storage.put("test", value); 这样没问题,仔细 体会一下
这样没问题,但是无意义。最小单元(list)里存的类型不定,用的时候容易发生类型错误,还不如针对具体类型设置不同的存储容器(多个存储容器)
写代码的农民 2014-03-25
  • 打赏
  • 举报
回复
Map< String, Map<String,List<?>> > storage = new HashMap<String, Map<String,List<?>>>(); Map<String,List<?>> value = new HashMap<String, List<?>>(); List<Object> list = new ArrayList<Object>(); list.add("a"); list.add(1); value.put("key", list); storage.put("test", value); 这样没问题,仔细 体会一下
lulu0126 2014-03-25
  • 打赏
  • 举报
回复
存储要根据实际明确的需求 不能什么都往里面存储 针对的你的情况,value要进一步拆分
oh_Maxy 2014-03-25
  • 打赏
  • 举报
回复
K 和V可以当做一个“类型占位符”,表示某个不确定的类型,真正用的时候,需要将K、V的类型给定,是String、Integer或者其它明确的类型。 可以看看List的源码,看看它的T,再对比一个具体的List<String>案例,思考下它进入到某个特定方法时的场景。

62,614

社区成员

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

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