案发现场
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Arrays.java:3213)
at java.util.Arrays$ArrayList.toArray(Arrays.java:3831)
at com.itplh.TestDemo.main(TestDemo.java:164)
源代码
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3);
String[] array = list.toArray(new String[0]);
for (String s : array) {
System.out.println(s);
}
}
原因分析
集合: 集合中存储的数据类型为Intger
目标数组: 转换成的目标数组数据类型为String
在使用java.util.List#toArray(T[])
方法进行转换时,由于转换前后数据类型不一致,导致报错。
源码:java.lang.System#arraycopy
/**
* ...
* @exception ArrayStoreException if an element in the <code>src</code>
* array could not be stored into the <code>dest</code> array
* because of a type mismatch.
*/
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
解决方案
将转换前后的数据类型调整为一致。
如,将
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3);
Integer[] array = list.toArray(new Integer[0]);
for (Integer s : array) {
System.out.println(s);
}
}
控制台输出:
1
2
3