云中烛火

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如下代码:

Map<String,String> map = new HashMap<String,String>();
        
map.put("key1", "123");
map.put("key2", "456");
        
List<String> list = (List<String>)map.values();

进行转换的时候产生异常

Exception in thread "main" java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List

 

由于map.values()方法返回的是Collection类型,你不能把他强转成List类型

 

values()方法的源码如下:

public Collection<V> values() {
        Collection<V> vs = values;
        return (vs != null ? vs : (values = new Values()));
    }

 

解决办法:

List<String> alist = new ArrayList<String>(map.values());

 

此ArrayList的构造方法源码如下:

public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }

 

posted on 2015-05-05 23:31  云中烛火  阅读(205)  评论(0)    收藏  举报