ClassCastException: Array $ ArrayList tidak dapat dilemparkan ke ArrayList

1. Perkenalan

ClassCastException adalah pengecualian waktu proses yang dimunculkan di Java saat kami mencoba mentransmisikan kelas dari satu jenis ke jenis lainnya dengan tidak benar. Itu dilemparkan untuk menunjukkan bahwa kode telah mencoba untuk mentransmisikan objek ke kelas terkait, tetapi itu bukan sebuah instance.

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

2. Detail ClassCastException

Pertama, mari kita lihat contoh sederhana. Pertimbangkan cuplikan kode berikut:

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

Kode di atas menyebabkan ClassCastException di mana kita memasukkan nilai kembali dari Arrays.asList (strArray) ke ArrayList.

Alasannya adalah bahwa meskipun metode statis Arrays.asList () mengembalikan Daftar, kita tidak tahu hingga runtime secara tepat implementasi apa yang dikembalikan . Jadi pada waktu kompilasi, kompilator juga tidak dapat mengetahui dan mengizinkan cast .

Ketika kode berjalan, implementasi aktual diperiksa yang menemukan bahwa Arrays.asList () mengembalikan Array $ List sehingga menyebabkan ClassCastException .

3. Resolusi

Kita cukup mendeklarasikan ArrayList kita sebagai List untuk menghindari pengecualian ini:

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

Namun, dengan mendeklarasikan referensi kita sebagai List, kita dapat menetapkan kelas apa pun yang mengimplementasikan antarmuka List , termasuk Arrays $ ArrayList yang dikembalikan oleh pemanggilan metode.

4. Ringkasan

Pada artikel ini, kami telah melihat penjelasan tentang apa sebenarnya ClassCastException dan tindakan apa yang harus kami ambil untuk memperbaiki masalah ini.

Kode lengkapnya dapat ditemukan di GitHub.