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;这个类型转换为什么会出异常?
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;这个类型转换为什么会出异常?
temp不能直接强转吧.
Set<String> set = new HashSet<String>();
set.add("qingyun");
set.add("hello"); String[] strs = set.toArray(new String[0]);
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
这一句还不明显吗?
不明白的话要翻翻API的,
不好意思,这会儿没空帮你翻了!
我问的是Object数组 为什么不能 转换为 String数组Object数组中存的就是字符串还有,不想回答的和那些不知道的别污染我的帖子
谢谢,只是不甚理解 new String[0] API上也看不太懂这个方法
⊙﹏⊙b汗
2.Object[]是一种对象,String[]是另一种对象,二者不是同一种类型。和数组元素的实际类型无关。