ClassCastException: Array $ ArrayList tidak boleh dihantar ke ArrayList

1. Pengenalan

ClassCastException adalah pengecualian runtime yang dibangkitkan di Java ketika kami cuba membuang kelas dari satu jenis ke jenis yang lain secara tidak betul. Ini dilemparkan untuk menunjukkan bahawa kod tersebut telah berusaha untuk membuang objek ke kelas yang berkaitan, tetapi yang bukan merupakan contoh.

Untuk pengenalan yang lebih mendalam mengenai pengecualian di Java, lihat di sini.

2. Butiran ClassCastException

Pertama, mari kita lihat contoh ringkas. Pertimbangkan coretan kod berikut:

String[] strArray = new String[] { "John", "Snow" }; ArrayList strList = (ArrayList) Arrays.asList(strArray); System.out.println("String list: " + strList);

Kod di atas menyebabkan ClassCastException di mana kita meletakkan nilai kembali Arrays.asList (strArray) ke ArrayList.

Sebabnya ialah walaupun kaedah statik Arrays.asList () mengembalikan Senarai, kita tidak tahu sehingga masa pelaksanaan apa yang dikembalikan . Oleh itu, pada masa penyusunan, pengkompil tidak dapat mengetahui dan membenarkan pemeran .

Apabila kod berjalan, pelaksanaan sebenar diperiksa yang mendapati bahawa Arrays.asList () mengembalikan Senarai $ Arrays sehingga menyebabkan ClassCastException .

3. Ketetapan

Kami hanya dapat menyatakan ArrayList kami sebagai Senarai untuk mengelakkan pengecualian ini:

List strList = Arrays.asList(strArray); System.out.println("String list: " + strList);

Walau bagaimanapun, dengan mengisytiharkan rujukan kami sebagai Senarai kita boleh menetapkan mana-mana kelas yang melaksanakan Senarai muka , termasuk Perlengkapan $ ArrayList dikembalikan oleh panggilan kaedah.

4. Ringkasan

Dalam artikel ini, kita telah melihat penjelasan mengenai apa sebenarnya ClassCastException dan langkah-langkah apa yang harus kita ambil untuk menyelesaikan masalah ini.

Kod lengkap boleh didapati di GitHub.