首页 > Java > java教程 > 正文

为什么在 Android 中,当转换为 String[] 时,List.toArray() 会抛出 ClassCastException?

Barbara Streisand
发布: 2024-11-01 10:49:02
原创
918 人浏览过

Why Does `List.toArray()` Throw a `ClassCastException` in Android When Casting to `String[]`?

Android 中 (String[])List.toArray() 上的 ClassCastException

尝试转换 ArrayList 时使用 toArray() 方法转换为 String[] 时,Android 应用程序通常会遇到 ClassCastException。例如,以下代码会触发此错误:

<code class="java">final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<>(Arrays.asList(v1));
String[] v3 = (String[]) v2.toArray();</code>
登录后复制

无论 v2 的内容如何(甚至是空数组),都会发生这种情况。

说明

发生此错误因为 toArray() 返回一个 Object[],而不是 String[]。泛型仅在编译时可用,因此 Java 虚拟机 (JVM) 无法确定要创建哪种数组类型。因此,它默认为 Object[],无法转换为 String[]。

解决方案

要解决此问题,请使用 toArray(T[] a) 显式指定数组类型方法并提供所需的数组类型作为参数。例如,此代码将正确创建 String[]:

<code class="java">String[] v3 = v2.toArray(new String[v2.size()]);</code>
登录后复制

此方法可确保返回的数组具有正确的类型和大小。

以上是为什么在 Android 中,当转换为 String[] 时,List.toArray() 会抛出 ClassCastException?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板