Artikel ini menganalisis metode mengubah daftar dan array di Java. Bagikan untuk semua orang untuk referensi Anda. Spesifiknya adalah sebagai berikut:
Hari ini saya menulis kode untuk menghadapi masalah aneh. sebagai berikut:
ArrayList <String> list = ArrayList baru <string> ();
Saya pikir seharusnya tidak ada masalah dalam menulis kode dengan cara ini, dan tidak ada kompilasi masalah. Namun, ketika operasi spesifik berjalan, laporan ini abnormal, sebagai berikut: Pengecualian dalam utas "utama" java.lang.classcastException: [ljava.lang.object;
Tapi tidak ada masalah menulis seperti ini:
ArrayList <string> Daftar = ArrayList baru <string> (); list.get (i);}
Kita dapat menjelaskan fenomena ini: Java memungkinkan transformasi ke atas dan ke bawah, tetapi apakah transformasi ini berhasil berdasarkan jenis objek ini di mesin virtual Java. Mesin virtual Java menyimpan jenis setiap objek. Array juga merupakan objek. Jenis array [ljava.lang.object. Mengonversi [ljava.lang.Object ke [ljava.lang.string jelas tidak mungkin, karena ini adalah transformasi ke bawah, dan mesin virtual hanya mempertahankan ini adalah array objek. Array adalah elemen dalam array adalah string, jadi transformasi ini tidak bisa berhasil. Elemen -elemen dalam array hanyalah referensi elemen, bukan elemen penyimpanan tertentu, sehingga jenis elemen dalam array masih disimpan di mesin virtual Java.
Menurut penjelasan di atas, kita dapat merangkum masalah ini ke model berikut:
Objek objs [] = objek baru [10];
Ini sama dengan kompilasi di atas. Jika kami memodifikasi kode ini, sebagai berikut:
String strs [] = string baru [10];
Ini dapat dikompilasi dan dilewati. Jadi kita dapat mengaitkan masalah ini dengan masalah aturan transformasi Java. Mari kita bicara tentang dukungan array Java pada model.
JDK5 sudah memiliki dukungan untuk jenis model, yang dapat memastikan keamanan tipe data dalam pengumpulan dan peta. Secara pribadi, saya harus mengembalikan t [] sesuai dengan model. Perhatikan lebih dekat kode sumber JDK dan temukan daftar itu memiliki dua cara untuk berubah menjadi array:
objek publik [] toarray ();
Metode ini mengembalikan semua elemen dalam daftar ke array dengan ukuran yang sama, dan semua elemen dalam array adalah tipe objek.
publik <T> t [] toarray (t [] a);
Metode ini mengembalikan semua elemen dalam daftar ke array dengan ukuran yang sama, dan semua elemen dalam array adalah tipe T.
Daftar dirancang karena kompiler Java tidak memungkinkan kami memiliki array model baru. Artinya, Anda tidak dapat mendefinisikan array seperti ini:
T arr = t baru [ukuran];
Tetapi Anda dapat menggunakan t [] untuk mewakili array, dan Anda dapat mengonversi array menjadi t []. Misalnya, publik <T> t [] toarray (t [] a) dalam daftar direalisasikan:
publik <T> t [] toarray (t [] a) {if (a.length <size) a = (t []) java.lang.reflect.array.newinstance (a.getClass (). getComponentType (), GetComponentType (), ukuran);
Dapat dilihat dari kode di atas bahwa karena Anda tidak tahu jenis array ini, Anda harus membuat array ini melalui mekanisme refleksi (a.getClass (). GetComponentType () metode untuk mendapatkan jenis elemen array).
Pada akhirnya, daftar dikonversi ke array untuk menanganinya ::
ArrayList <String> Daftar = ArrayList baru <string> ();
Sebaliknya, bagaimana jika Anda ingin mengubah array menjadi daftar? sebagai berikut:
String [] s = {"a", "b", "c"};
Diharapkan bahwa artikel ini bermanfaat untuk desain program Java semua orang.