Saya suka bagaimana nilai null dipertahankan dalam implementasi ini.
4
Jika Anda menggunakan String.valueOf(object), Anda tidak perlu melakukan object != null ? object.toString() : nullhal itu
user219882
2
@Tomas: itu akan menambahkan string dengan nilai "null"alih-alih literal null. Ini lebih tergantung pada kebutuhan bisnis apakah itu diinginkan atau tidak. Bagi saya, itu sama sekali tidak dapat diterima karena berpotensi menimbulkan bug besar.
BalusC
1
@Tomas: "null"tidak nullsama sekali. Itu nullmemiliki arti khusus di Jawa. Tidak masuk akal untuk dipaksa melakukannya if (item.equals("null"))saat memeriksa itu sesudahnya.
BalusC
1
@ Tomas: Anda hanya mengalahkan sifat mengetik yang kuat dari Java dengan cara ini. Tetapi seperti yang dikatakan, itu tergantung pada persyaratan bisnis apakah itu diinginkan. Bagi saya, itu tidak bisa diterima. Lakukan apa pun yang Anda inginkan dan waktu akan mengajar :)
BalusC
18
Tidak aman melakukan itu!
Bayangkan jika Anda memiliki:
ArrayList<Object> list =newArrayList<Object>();
list.add(newEmployee("Jonh"));
list.add(newCar("BMW","M3"));
list.add(newChocolate("Twix"));
Tidak masuk akal untuk mengubah daftar Objek tersebut menjadi tipe apa pun.
Kecuali mereka memiliki Object#toString()metode yang diganti. Namun, konversi tipe keseluruhan dari X ke String untuk tujuan lain selain presentasi manusia memang tidak masuk akal.
BalusC
13
Jika Anda ingin melakukannya dengan cara kotor, coba ini.
Dengan Java Generics Membawa daftar X dan mengembalikan daftar T yang memperluas atau mengimplementasikan X, Manis!
// the cast is is actually checked via the method API@SuppressWarnings("unchecked")publicstatic<T extends X, X>ArrayList<T> convertToClazz(ArrayList<X> from,Class<X> inClazz,Class<T> outClazz){ArrayList<T> to =newArrayList<T>();for(X data : from){
to.add((T) data);}return to;}
Jawaban:
Karena ini sebenarnya bukan daftar string, cara termudah adalah mengulanginya dan mengonversi sendiri setiap item menjadi daftar string baru:
Atau saat Anda belum menggunakan Java 8:
Atau saat Anda belum menggunakan Java 7:
Perhatikan bahwa Anda harus mendeklarasikan antarmuka (
java.util.List
dalam kasus ini), bukan implementasinya.sumber
String.valueOf(object)
, Anda tidak perlu melakukanobject != null ? object.toString() : null
hal itu"null"
alih-alih literalnull
. Ini lebih tergantung pada kebutuhan bisnis apakah itu diinginkan atau tidak. Bagi saya, itu sama sekali tidak dapat diterima karena berpotensi menimbulkan bug besar."null"
tidaknull
sama sekali. Itunull
memiliki arti khusus di Jawa. Tidak masuk akal untuk dipaksa melakukannyaif (item.equals("null"))
saat memeriksa itu sesudahnya.Tidak aman melakukan itu!
Bayangkan jika Anda memiliki:
Tidak masuk akal untuk mengubah daftar Objek tersebut menjadi tipe apa pun.
sumber
Object#toString()
metode yang diganti. Namun, konversi tipe keseluruhan dari X ke String untuk tujuan lain selain presentasi manusia memang tidak masuk akal.Jika Anda ingin melakukannya dengan cara kotor, coba ini.
Keuntungan: di sini Anda menghemat waktu dengan tidak mengulang semua objek.
Kerugian: bisa menghasilkan lubang di kaki Anda.
sumber
Menggunakan jambu biji :
sumber
Menggunakan Java 8, Anda dapat melakukan:
sumber
Anda dapat menggunakan karakter pengganti untuk melakukan ini sebagai berikut
sumber
Berikut alternatif lain menggunakan Jambu Biji
sumber
Kode Anda
ArrayList<String> list2 = (String)list;
tidak dapat dikompilasi karenalist2
bukan tipeString
. Tapi itu bukan satu-satunya masalah.sumber
Menggunakan Java 8 lambda:
sumber
Dengan Java Generics Membawa daftar X dan mengembalikan daftar T yang memperluas atau mengimplementasikan X, Manis!
sumber
Solusi sederhana:
Catatan: ini berfungsi ketika daftar berisi semua elemen tipe data String.
sumber