首页  >  文章  >  Java  >  为什么将 `toArray()` 结果转换为 `String[]` 会导致 `ClassCastException`?

为什么将 `toArray()` 结果转换为 `String[]` 会导致 `ClassCastException`?

Barbara Streisand
Barbara Streisand原创
2024-11-02 04:03:03420浏览

Why does casting `toArray()` result to `String[]` cause a `ClassCastException`?

无法将 toArray() 结果转换为 String[]

以下代码始终在第 3 行触发 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[],即使 Object[ 中的元素也无法直接转换为 String[] ] 是字符串。这是因为泛型仅在编译时实现,在运行时不存在。因此,toArray() 无法确定预期的数组类型。

要纠正此问题,请使用以下修改后的代码:

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

此版本创建正确类型的数组 ( String[]) 具有适当的长度,消除了 ClassCastException。

以上是为什么将 `toArray()` 结果转换为 `String[]` 会导致 `ClassCastException`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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