为什么要这么设计(看了SimpleExpandableListAdapter.java源代码的疑问)?

youngwolf 2011-03-02 06:42:45
它的构造函数接受一个 List<? extends Map<String, ?>> groupData 类型的参数。
但在使用这个参数的时候,却是这样的:
v.setText((String)data.get(from[i])); //data就是 List 里面的 Map<String, ?>

开始没看源代码,我一看这参数,觉得SimpleExpandableListAdapter好神奇,大家都知道
Map<String, ?> 里面的问号可以是其它任何从Object继承的类型,那么我非常想知道,它是如何做到支持任何类型的呢?
没想到一看源代码,原来是强转!!!

那么,为什么不接受 List<? extends Map<String, String>> 类型呢?这样我一看就知道应该怎么传入参数了,可它却是一个问号,那么我完全有可能传入一个 List<? extends Map<String, Integer>> 类型变量,会怎样呢?(崩溃,我试过了)

我想知道这样设计是为什么,有什么好处?
...全文
171 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxiangtao 2011-10-31
  • 打赏
  • 举报
回复
同样有这个疑惑,Map<String ,?>,若"?"为自己定义的数据存储类型时,就崩溃了!!!
afonso1099 2011-08-08
  • 打赏
  • 举报
回复
List<? extends Map<String, Integer>> 我想问下 前面的写成List<Map<String, Integer>> 不是更好,为什么还要加前面的。不明白这样设计的 意义.... 高手解释................
afonso1099 2011-08-08
  • 打赏
  • 举报
回复
可能是 你传入的值 不是 String的 map<String, ?> ,强转或者 是 对象.toString()
youngwolf 2011-03-15
  • 打赏
  • 举报
回复
为什么不匹配,我都试过了,运行时崩溃,编译没问题。
sky123123 2011-03-11
  • 打赏
  • 举报
回复
构造是List<? extends Map<String, ?>> 这样子的、

你直接给成List<? extends Map<String, Integer>> 、类型肯定不匹配了、
foley_liao 2011-03-03
  • 打赏
  • 举报
回复
我也没用过SimpleAdapter哦,我想这样设计肯定有好处的,这里只是在setText时候用到他必须是string类型,也许其他地方必须使用其他类型呢
小裴同学 2011-03-03
  • 打赏
  • 举报
回复
从来不用SimpleAdapter的飘过。。
youngwolf 2011-03-03
  • 打赏
  • 举报
回复
顶,有人能解释一下吗?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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