Set<String> set = new HashSet<String>(); set.add("qingyun");
set.add("hello"); Object[] temp = set.toArray();
String[] strs = (String[])temp;
这段代码会报
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;这个类型转换为什么会出异常?

解决方案 »

  1.   

    String[] strs = (String[])temp;
    temp不能直接强转吧.
      

  2.   


            Set<String> set = new HashSet<String>();
            set.add("qingyun");
            set.add("hello");         String[] strs = set.toArray(new String[0]);
          
      

  3.   

    toArray
    public <T> T[] toArray(T[] a)
    返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将分配一个具有指定数组的运行时类型和此 collection 大小的新数组。 
    如果指定的数组能容纳 collection,并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧接 collection 尾部的元素设置为 null。(只有 在调用者知道此 collection 没有包含任何 null 元素时才能用此方法确定 collection 的长度。) 如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。 像 Collection.toArray() 方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下,可以用来节省分配开销。 假定 x 是只包含字符串的一个已知 collection。以下代码用来将 collection 转储到一个新分配的 String 数组:      String[] y = x.toArray(new String[0]); 注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 
    此实现返回一个数组,它包含此 collection 的迭代器返回的所有元素,这些元素的排列顺序与数组的连续元素存储顺序相同,都是从索引 0 开始。如果迭代器返回的元素数太大,不适合指定数组,则在新分配的数组中返回这些元素,该数组的长度等于迭代器返回的元素数,即使此 collection 的大小在进行迭代期间发生更改也是如此,这种情况可能发生在 collection 允许在迭代期间进行并发修改时。size 方法只是作为一个优化提示被调用;即使迭代器返回不同的元素数,也会返回正确的结果。 此方法等效于:  List<E> list = new ArrayList<E>(size());
     for (E e : this)
         list.add(e);
     return list.toArray(a);
     
    指定者:
    接口 Collection<E> 中的 toArray
    参数:
    a - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。 
    返回:
    包含此 collection 中所有元素的数组 
    抛出: 
    ArrayStoreException - 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型 
    NullPointerException - 如果指定的数组为 null
      

  4.   

    list.toArray(new String[0]); 
      

  5.   

    [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; 
    这一句还不明显吗?
    不明白的话要翻翻API的,
    不好意思,这会儿没空帮你翻了!
      

  6.   

    楼上的那帮人
    我问的是Object数组 为什么不能 转换为 String数组Object数组中存的就是字符串还有,不想回答的和那些不知道的别污染我的帖子
      

  7.   


    谢谢,只是不甚理解 new String[0] API上也看不太懂这个方法
    ⊙﹏⊙b汗
      

  8.   

    1.数组是一种对象,而不是像C系列语言一样只是一块内存。
    2.Object[]是一种对象,String[]是另一种对象,二者不是同一种类型。和数组元素的实际类型无关。