java:(String )List.toArray()给出ClassCastException
下面的代码(在android中运行)总是会在第三行给我一个ClassCastException:
final String[] v1 = i18nCategory.translation.get(id); final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1)); String[] v3 = (String[])v2.toArray();
它也发生在v2是Object [0]的时候,当它有string的时候。 任何想法为什么?
这是因为当你使用
toArray()
它返回一个Object [],它不能被转换成一个String [](即使这些内容是string)这是因为toArray方法只获得一个
List
并不是
List<String>
因为generics只是一个源代码,并且在运行时不可用,所以它不能确定要创build的数组types。
使用
toArray(new String[v2.size()]);
它分配正确的数组(String []和正确的大小)
你正在使用错误的toArray()
请记住,Java的generics大多是语法糖。 一个ArrayList实际上并不知道它的所有元素都是string。
要解决您的问题,请致电toArray(T[])
。 在你的情况下,
String[] v3 = v2.toArray(new String[v2.size()]);
请注意,通用化formstoArray(T[])
返回T[]
,所以结果不需要显式强制转换。