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[] ,所以结果不需要显式强制转换。