下面的代码执行后:
private void onButtonListToArrayClick() { // Array--->List String[] strArray = new String[] { "aa", "bb" }; List<String> list = new ArrayList<String>(Arrays.asList(strArray)); list.add("cc"); // List--->Array String[] strArray2; try { strArray2 = (String[]) list.toArray(); } catch (Exception e) { Log.i("ToArray", "failure:" + e.getMessage()); } }
原因为list.toArray()返回的是Object类型,强制转换的时候发生ClassCastException
程序修改如下:
private void onButtonListToArrayClick() { // Array--->List String[] strArray = new String[] { "aa", "bb" }; List<String> list = new ArrayList<String>(Arrays.asList(strArray)); list.add("cc"); // List--->Array String[] strArray2 = null; try { strArray2 = list.toArray(new String[0]); } catch (Exception e) { Log.i("ToArray", "failure:" + e.getMessage()); } for (String element : strArray2) { Log.i("ToArray", "strArray2:" + element); } }
上面的方法
strArray2 = list.toArray(new String[0]);
strArray2 = new String[list.size()]; strArray2 = list.toArray(strArray2);
下面是ArrayList的两个toArray()方法的源代码:
public Object[] toArray() { Object[] result = new Object[size]; System.arraycopy(elementData, 0, result, 0, size); return result; } 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; }