先简单描述一下问题,arrayList中存放着4个MyClass的instance,然后我把这个arrayList转换成了数组,并放到了hashmap中
hashmap.put(key,arrayList.toArray());
现在,我在另一个地方要重新得到这个长度为4的数组,于是我用下面的代码:
(MyClass[])hashmap.get(key)
但是报错,我觉得有可能是因为我hashmap.get(key)获得的是一个Object,它不能转换成数组,但不是说java中的Object是一切的父类吗?应该也可以转换成数组把。或者是其他地方出了问题,请高手解答,谢谢了先

解决方案 »

  1.   

    (MyClass[]) ( hashmap.get(key) )加一层括号,试试
      

  2.   

    hashmap.put(key,arrayList.toArray(new myClass[arrayList.size()]));
      

  3.   

    子类可以强制转换为父类,反之是不行的。 
    以下下代码正确public static void main(String[] args) {
    ArrayList a = new ArrayList();
    for(int i=0; i<10; i++)
    a.add(String.valueOf(i));
    HashMap h = new HashMap();
    h.put("1", a.toArray());
    Object[] o = (Object[]) h.get("1");
    for(int i=0; i<o.length; i++)
    {
                               // 要强制转换也应该在这 MyClass c = (MyClass)o[i]; System.out.println(o[i].toString());
    }
    }
      

  4.   

    HashMap map= new HashMap();
        map.put("map",obj.toArray());
        
        Object o = (map.get("map")); 
        if(o.getClass().isArray()){
          int length = Array.getLength(o);
          MyClass[] ls = new MyClass[length];
          for(int i=0;i<length;i++){
            ls[i] = (MyClass)Array.get(o,i);
          }
      

  5.   

    经测试,刚才说个那个不行,用下边的这个可以。Object[] o =(Object[])hm.get("KKK");以后再 myClass c = (myClass)o[i];
      

  6.   

    楼上有必要这么麻烦吗?
    只要在toarray后面定义参数指出要转换的数组的类型不就可以了。
    如果要返回某一类型的Array,只需要传入一个同类型Array的对象。
    toarray();返回的是Object数组,没有生成b的对象,它只是个空引用。
    要返回b对象数组,首先要实体化b对象。
    所以单纯的toarray();是不行的。应该toArray(Object[] b);
    所以对于楼主的问题只要
    hashmap.put(key,arrayList.toArray(new myClass[arrayList.size()]));
    然后(MyClass[])hashmap.get(key)就可以了
      

  7.   

    navence的方法是比较符合要求的,也比较简洁,选为正解。同时也感谢其他朋友的帮助,谢谢!