A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lovecx24 中级黑马   /  2013-12-5 17:31  /  1282 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Map.values()返回值是Collection,为什么不能使Set或者是List,List和set都继承Collection啊?

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

3 个回复

倒序浏览
这个是面向接口吧,至于为什么不是Set 或者List,源码就是那么写的,不懂了

评分

参与人数 1黑马币 +9 收起 理由
狼王 + 9 赞一个!

查看全部评分

回复 使用道具 举报
你可以查看下源码,Map<K,V>是接口,并没有实现Collection接口,定义时通常格式:
Map<String,String> m = new HashMap<String,String>();
HashMap的对象向上转型为Map,而且,HashMap也没有实现Collection接口
HashMap中values方法:
  1. public Collection<V> values() {
  2.         Collection<V> vs = values;
  3.         return (vs != null ? vs : (values = new Values()));
  4.     }
复制代码


List<String> l = (List<String>) a.values(); // 可以通过编译,但运行时会报出ClassCastException异常,因为这是不安全的向下转型。

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

回复 使用道具 举报
Map.values()返回值是Collection,返回接口类型使用起来会更加灵活吧

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马