java:(string[])list.toarray()给出classcastexception

pes8fvy9  于 2021-07-03  发布在  Java
关注(0)|答案(4)|浏览(300)

下面的代码(在android中运行)总是在第3行中给我一个classcastexception:

final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();

当v2是对象[0]以及其中包含字符串时,也会发生这种情况。知道为什么吗?

ndh0cuux

ndh0cuux1#

你用错了 toArray() 请记住,java的泛型主要是语法糖。arraylist实际上并不知道它的所有元素都是字符串。
要解决您的问题,请致电 toArray(T[]) . 就你而言,

String[] v3 = v2.toArray(new String[v2.size()]);

注意,泛化形式 toArray(T[]) 退货 T[] ,因此不需要显式转换结果。

wr98u20j

wr98u20j2#

String[] str = new String[list.size()];
str = (String[]) list.toArray(str);

像这样使用。

gorkyyrv

gorkyyrv3#

这是因为当你使用

toArray()

它返回一个对象[],它不能被转换成字符串[](即使内容是字符串),这是因为toarray方法只得到一个

List

而不是

List<String>

因为泛型只是源代码,在运行时不可用,所以它无法确定要创建什么类型的数组。
使用

toArray(new String[v2.size()]);

它分配正确类型的数组(字符串[],大小正确)

bttbmeg0

bttbmeg04#

String[] v3 = v2.toArray(new String[0]);

同样的,请注意,一旦将正确的arraytype指定给该方法,就不需要再强制转换了。

相关问题