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