Rumah  >  Artikel  >  Java  >  Mengapakah `List.toArray()` Melemparkan `ClassCastException` dalam Android Apabila Menghantar ke `String[]`?

Mengapakah `List.toArray()` Melemparkan `ClassCastException` dalam Android Apabila Menghantar ke `String[]`?

Barbara Streisand
Barbara Streisandasal
2024-11-01 10:49:02826semak imbas

Why Does `List.toArray()` Throw a `ClassCastException` in Android When Casting to `String[]`?

ClassCastException pada (String[])List.toArray() dalam Android

Apabila cuba menghantar ArrayList kepada String[] menggunakan kaedah toArray(), apl Android biasanya menghadapi ClassCastException. Sebagai contoh, kod berikut mencetuskan ralat ini:

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

Ini berlaku tanpa mengira kandungan v2 (walaupun tatasusunan kosong).

Penjelasan

Ralat ini berlaku kerana toArray() mengembalikan Objek[], bukan String[]. Generik hanya tersedia pada masa penyusunan, jadi Mesin Maya Java (JVM) tidak dapat menentukan jenis tatasusunan yang hendak dibuat. Oleh itu, ia lalai kepada Object[], yang tidak boleh dihantar ke String[].

Penyelesaian

Untuk menyelesaikan isu ini, nyatakan secara jelas jenis tatasusunan menggunakan toArray(T[] a) kaedah dan menyediakan jenis tatasusunan yang dikehendaki sebagai parameter. Sebagai contoh, kod ini akan mencipta String[] dengan betul:

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

Kaedah ini memastikan tatasusunan yang dikembalikan adalah daripada jenis dan saiz yang betul.

Atas ialah kandungan terperinci Mengapakah `List.toArray()` Melemparkan `ClassCastException` dalam Android Apabila Menghantar ke `String[]`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn