黑马程序员技术交流社区

标题: 关于Map.values() [打印本页]

作者: lovecx24    时间: 2013-12-5 17:31
标题: 关于Map.values()
Map.values()返回值是Collection,为什么不能使Set或者是List,List和set都继承Collection啊?

作者: ysunday    时间: 2013-12-5 20:58
这个是面向接口吧,至于为什么不是Set 或者List,源码就是那么写的,不懂了
作者: 胡永城    时间: 2013-12-6 00:15
你可以查看下源码,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异常,因为这是不安全的向下转型。
作者: treecolor166    时间: 2013-12-6 21:29
Map.values()返回值是Collection,返回接口类型使用起来会更加灵活吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2