Gav*_*iel 96 java list classcastexception toarray
以下代码(在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();
Run Code Online (Sandbox Code Playgroud)
它也发生在v2是Object [0]时,以及当它中有字符串时.任何想法为什么?
MeB*_*Guy 238
这是因为当你使用时
toArray()
Run Code Online (Sandbox Code Playgroud)
它返回一个Object [],它不能转换为String [](即使内容是字符串)这是因为toArray方法只得到一个
List
Run Code Online (Sandbox Code Playgroud)
并不是
List<String>
Run Code Online (Sandbox Code Playgroud)
因为泛型是源代码唯一的东西,并且在运行时不可用,因此它无法确定要创建的数组类型.
使用
toArray(new String[v2.size()]);
Run Code Online (Sandbox Code Playgroud)
分配正确类型的数组(String []和正确的大小)
Dil*_*nga 35
你使用的是错的 toArray()
请记住,Java的泛型主要是语法糖.ArrayList实际上并不知道它的所有元素都是字符串.
要解决您的问题,请致电toArray(T[]).在你的情况下,
String[] v3 = v2.toArray(new String[v2.size()]);
Run Code Online (Sandbox Code Playgroud)
请注意,泛化形式toArray(T[])返回T[],因此不需要显式转换结果.
| 归档时间: |
|
| 查看次数: |
73668 次 |
| 最近记录: |