首頁  >  文章  >  Java  >  為什麼在 Android 中,當轉換為 String[] 時,List.toArray() 會拋出 ClassCastException?

為什麼在 Android 中,當轉換為 String[] 時,List.toArray() 會拋出 ClassCastException?

Barbara Streisand
Barbara Streisand原創
2024-11-01 10:49:02919瀏覽

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