Rumah > Java > javaTutorial > teks badan

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

Barbara Streisand
Lepaskan: 2024-11-01 10:49:02
asal
836 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!