make arrayList.toArray () mengembalikan tipe yang lebih spesifik
189
Jadi, biasanya ArrayList.toArray()akan mengembalikan jenis Object[].... tetapi seharusnya itu adalah
Arraylistobjek Custom, bagaimana cara membuat toArray()untuk mengembalikan jenis Custom[]bukan Object[]?
Ada 2 metode dengan nama yang sama 'toArray ()' di ArrayList. Mulai dari 1,5, metode kedua mengambil array yang diketik. Apakah Anda mencari solusi untuk pra-1.5?
AFAIK: Ini ada hubungannya dengan Jawa secara keseluruhan, karena tidak dapat menggunakan konstruktor generik. Jadi, meskipun ia tahu Anda membutuhkannya untuk mengonversi objek Anda seperti String [] atau MyObject [], ia tidak bisa instantiate sendiri.
Bagaimana jika alih-alih String yang ingin kita gunakan ganda? Tampaknya gagal ... Kita bisa menggunakan Double, tetapi bagaimana jika saya ingin double?
Pixel
2
@ pbs Anda tidak bisa. Obat generik Java hanya mendukung jenis referensi, bukan primitif. Auto-boxing / unboxing seharusnya membuat Anda mengabaikan perbedaan di antara mereka untuk sebagian besar.
Saya mendapat jawabannya ... ini tampaknya berfungsi dengan baik
publicint[] test (int[]b ){ArrayList<Integer> l =newArrayList<Integer>();Object[] returnArrayObject = l.toArray();int returnArray[]=newint[returnArrayObject.length];for(int i =0; i < returnArrayObject.length; i++){
returnArray[i]=(Integer) returnArrayObject[i];}return returnArray;}
Bagaimana jika kita memiliki ArrayList <Animal> dan itu berisi jenis Anjing dan Kucing yang memperpanjang Hewan? Sepertinya itu akan gagal jika elemen pertama adalah Anjing dan selanjutnya adalah Kucing. Ia melihat elemen pertama, menciptakan array bertipe Anjing, menambahkan anjing kemudian mencoba menambahkan kucing dan gagal. Juga mungkin tidak bekerja dengan E.
Jawaban:
Seperti ini:
Sebelum Java6 disarankan untuk menulis:
karena implementasi internal akan merealokasi array dengan ukuran yang benar sehingga Anda lebih baik melakukannya dimuka. Karena Java6 array kosong lebih disukai, lihat .toArray (MyClass baru [0]) atau .toArray (MyClass baru [myList.size ()]))?
Jika daftar Anda tidak diketik dengan benar, Anda perlu melakukan casting sebelum memanggil toArray. Seperti ini:
sumber
Tidak perlu kembali
Object[]
, misalnya: -Inilah
Custom
kelas saya : -sumber
http://download.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object[[%29
sumber
Saya mendapat jawabannya ... ini tampaknya berfungsi dengan baik
sumber
Sampel:
sumber