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

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

Barbara Streisand
Barbara Streisand原创
2024-11-01 10:49:02826浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn