下面的代码(在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]以及其中包含字符串时,也会发生这种情况。知道为什么吗?
ndh0cuux1#
你用错了 toArray() 请记住,java的泛型主要是语法糖。arraylist实际上并不知道它的所有元素都是字符串。要解决您的问题,请致电 toArray(T[]) . 就你而言,
toArray()
toArray(T[])
String[] v3 = v2.toArray(new String[v2.size()]);
注意,泛化形式 toArray(T[]) 退货 T[] ,因此不需要显式转换结果。
T[]
wr98u20j2#
String[] str = new String[list.size()]; str = (String[]) list.toArray(str);
像这样使用。
gorkyyrv3#
这是因为当你使用
它返回一个对象[],它不能被转换成字符串[](即使内容是字符串),这是因为toarray方法只得到一个
List
而不是
List<String>
因为泛型只是源代码,在运行时不可用,所以它无法确定要创建什么类型的数组。使用
toArray(new String[v2.size()]);
它分配正确类型的数组(字符串[],大小正确)
bttbmeg04#
String[] v3 = v2.toArray(new String[0]);
同样的,请注意,一旦将正确的arraytype指定给该方法,就不需要再强制转换了。
4条答案
按热度按时间ndh0cuux1#
你用错了
toArray()
请记住,java的泛型主要是语法糖。arraylist实际上并不知道它的所有元素都是字符串。要解决您的问题,请致电
toArray(T[])
. 就你而言,注意,泛化形式
toArray(T[])
退货T[]
,因此不需要显式转换结果。wr98u20j2#
像这样使用。
gorkyyrv3#
这是因为当你使用
它返回一个对象[],它不能被转换成字符串[](即使内容是字符串),这是因为toarray方法只得到一个
而不是
因为泛型只是源代码,在运行时不可用,所以它无法确定要创建什么类型的数组。
使用
它分配正确类型的数组(字符串[],大小正确)
bttbmeg04#
同样的,请注意,一旦将正确的arraytype指定给该方法,就不需要再强制转换了。