1.
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);
return result;
}
String[] to = (String[])to_list.toArray();
ArrayList.toArray()返回的Object[]是其创建类型,downcast到其子类String[] 当然是非法的cast,所以会报错。
2.
- public Object[] toArray(Object a[]) {
- if (a.length < size)
- a = (Object[])java.lang.reflect.Array.newInstance(
- a.getClass().getComponentType(), size);
- System.arraycopy(elementData, 0, a, 0, size);
-
- if (a.length > size)
- a[size] = null;
-
- return a;
- }
它是根据你传进来的那个数组的元素类型进行创建,所以就不会有类型不匹配的问题。
无参数的实现中,它是按照Object[]进行创建,当然就会存在一个类型匹配的问题了。
java sdk doc 上讲:
public Object[] toArray(Object[] a)
a--the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.
如果这个数组a足够大,就会把数据全放进去,返回的数组也是指向这个数组,(数组多余的空间存储的是null对象);要是不够大,就申请一个跟参数同样类型的数组,把值放进去,然后返回。
------君临天下,舍我其谁
------