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. Stringadalah subkelas dari Object, jadi mengapa bukan List<String>subkelas dari List<Object>?
2. Saya menulis beberapa kode untuk menunjukkan ini di2. tyvm