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

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

Barbara Streisand
Lepaskan: 2024-11-01 10:49:02
asal
985 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan