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

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

Barbara Streisand
发布: 2024-11-02 04:03:03
原创
460 人浏览过

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

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