首頁  >  文章  >  Java  >  為什麼將 `toArray()` 結果轉換為 `String[]` 會導致 `ClassCastException`?

為什麼將 `toArray()` 結果轉換為 `String[]` 會導致 `ClassCastException`?

Barbara Streisand
Barbara Streisand原創
2024-11-02 04:03:03421瀏覽

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>
以下程式碼總是在第3 行觸發ClassCastException:

無論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