Apa perbedaan antara List
, List<?>
, List<T>
, List<E>
, dan List<Object>
?
1. Daftar
List
: adalah jenis mentah, oleh karena itu tidak typesafe
. Itu hanya akan menghasilkan kesalahan runtime ketika casting buruk. Kami ingin kesalahan waktu kompilasi ketika para pemain buruk. Tidak disarankan untuk digunakan.
2. Daftar <?>
List<?>
adalah wildcard tak terbatas. Tapi saya tidak yakin untuk apa ini? Saya dapat mencetak List<?>
tanpa masalah:
public static void test(List<?> list){
System.out.println(list); // Works
}
Mengapa saya tidak bisa menambahkan item ke List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3. Daftar <T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Saya tidak mengerti sintaks ini. Saya melihat sesuatu seperti ini, dan berhasil:
public <T> T[] toArray(T[] a){
return a;
}
Kadang-kadang, saya melihat <T>
, atau <E>
, atau <U>
, <T,E>
. Apakah mereka semua sama atau mereka mewakili sesuatu yang berbeda?
4. Daftar <Object>
Ini memberikan kesalahan "Metode test(List<Object>)
ini tidak berlaku untuk argumen List<String>
":
public static void test(List<Object> list){
System.out.println(list);
}
Jika saya mencoba ini, maka saya mendapat "Tidak dapat mengirim dari List<String>
ke List<Object>
":
test((List<Object>) names);
Saya bingung. String
adalah subkelas dari Object
, jadi mengapa bukan List<String>
subkelas dari List<Object>
?
2
. Saya menulis beberapa kode untuk menunjukkan ini di2
. tyvm